blob: 20653d75e757dc8787eb8b8bf484b1378ddf73b1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#!/usr/bin/perl
# A script that tries to unload itself while it's running. This causes
# irssi to segfault. It isn't a surprise that a script can't safely
# unload itself, but it sort of is a surprise that irssi segfaults.
# I'd expect it to give an error message and not segfault.
# Save this file as: ~/.irssi/scripts/selfunload.pl
# Load it in irssi with: /script load selfunload
# Execute with: /selfunload
# gdb backtrace of the core file it produces:
# #0 0x00002b24a04a4c12 in free () from /lib64/libc.so.6
# #1 0x00000000004a05d5 in perl_script_unload ()
# (no, I don't have debug symbols in my irssi binary, sorry).
use warnings;
use strict;
use Irssi qw/command command_bind/;
our $VERSION = "0.0";
our %IRSSI = (
authors => 'B. Watson',
contact => 'yalhcru@gmail.com or Urchlay on FreeNode ##slackware',
name => 'selfunload',
description => 'script that makes irssi segfault'
license => 'WTFPL',
url => 'http://urchlay.naptime.net/repos/misc-scripts/plain/selfunload.pl',
);
sub selfunload {
# Attempt to unload myself while I'm running:
command("/script unload selfunload");
# The next command never executes, we've already segfaulted irssi!
command("/echo unloaded");
}
command_bind("selfunload", "selfunload");
|