aboutsummaryrefslogtreecommitdiff
path: root/doc/bugs/attachment:_failed_to_get_filehandle.mdwn
blob: 765082cf970734729ec9b4363e19eeec9e223325 (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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
I can't add any attachment to my wiki. When I select file using "Browse"
button and click "Upload Attachment", then `ikiwiki.cgi` file displays
the error message like below:

    Błąd: failed to get filehandle

> Can you do some debugging? If you edit attachment.pm line 136, to print
> out what it did get, and show me what that yields, maybe I can figure
> this out.

	error("failed to get filehandle ($fh)");

>> Sure. I've done the change and it seems that $fh variable is undefined:

>>     Use of uninitialized value in concatenation (.) or string at /usr/share/perl5/IkiWiki/Plugin/attachment.pm line 135.
>>     failed to get filehandle ()

> Also, what web server and version of perl is this? --[[Joey]]

>> It's Apache2 2.2.8-1ubuntu0.3 and Perl 5.8.8-12 from Ubuntu Hardy. --[[Paweł|ptecza]]

>>> Hmm, is your CGI.pm perhaps creating the attachment temp file, but
>>> not providing an open filehandle to it via the `upload` method?
>>> Change the debugging line to this: --[[Joey]]

	error("failed to get filehandle:$fh ; file:$filename ; is ref:".ref($q->param('attachment')));

>>>> Now my Ikiwiki returns:

>>>>     failed to get filehandle: ; file:sandbox/test.txt ; is ref:

>>>> Is it helpful for you? --[[Paweł|ptecza]]

>>>>> Yes, this suggests that CGI.pm's `upload` function is not working,
>>>>> but that it *is* returning a filehandle pointing at the attachment
>>>>> using the old method. Hmm, so I'll bet you have a CGI.pm version
>>>>> older than 2.47. Can you find your system's CGI.pm and grep for
>>>>> "VERSION" in it to determine the version? I checked debian stable.
>>>>> and its perl 5.8.8 has version 3.15, so is not affected, I think.

>>>>>> I have CGI.pm 3.15 too: 

>>>>>>     $ grep VERSION= /usr/share/perl/5.8.8/CGI.pm
>>>>>>     $CGI::VERSION='3.15';

>>>>> I've just checked in a fix that should work, can you test it?
>>>>> [diff](http://git.ikiwiki.info/?p=ikiwiki;a=commitdiff;h=71f10579c00a8ddc20ada1a1efd33aac25a3da7e) --[[Joey]]

>>>>>> I've patched `attachment.pm` module, but the bug still occurs.
>>>>>> However I can see a little progress. I changed invoking `error()`
>>>>>> subroutine like you showed me before and now Ikiwiki prints

>>>>>>     failed to get filehandle:test.txt ; file:sandbox/test.txt ; is ref:

>>>>>> --[[Paweł|ptecza]]

>>>>>>> Well then, your CGI.pm is somehow not behaving as its documentation
>>>>>>> describes, in two ways:
>>>>>>> 1. `upload()` is not returning a reference to the filehandle
>>>>>>> 2. The filename returned by `param("attachment")` is not also
>>>>>>>    a file handle.
>>>>>>> That seems very broken. I can try to work around it some more
>>>>>>> though. I've checked in a second try at dealing with things, can
>>>>>>> you try it? --[[Joey]]

>>>>>>>> Do you mean that [diff](http://git.ikiwiki.info/?p=ikiwiki;a=commitdiff;h=66f35e30dcea03c631a293e2341771277543b4ae)?
>>>>>>>> If so, then it causes "Internal Server Error" for me:

>>>>>>>>     Can't use string ("test.txt") as a symbol ref while "strict refs" in use at /usr/share/perl5/IkiWiki/Plugin/attachment.pm line 144.

>>>>>>>> I can rebuild Debian stable source package with CGI for Perl. Maybe it will help me? What do you think? --[[Paweł|ptecza]]

>>>>>>>>> Silly thinko on my part, fixed that in git.. --[[Joey]]

The same message I can see in the Apache log file. There is also
following warning:

    Use of uninitialized value in length at /usr/share/perl5/IkiWiki/Plugin/attachment.pm line 36.

> This is unrelated, I've fixed the warning message. --[[Joey]]

Is it Ikiwiki bug or my attachment plugin is misconfigured? --[[Paweł|ptecza]]

> Joey, please fix the colon in page name of my report. [...]

>> Moved to [[colon:problem]] --[[Joey]]