[php-maint] Bug#344481: Mysterious crash in php4-rrdtool

Artur R. Czechowski arturcz at hell.pl
Wed Jan 4 23:20:30 UTC 2006


On Thu, Dec 22, 2005 at 10:21:52PM -0800, Steve Langasek wrote:
> I'd rather see some analysis to show where the bug actually belongs instead
> of guessing and reassigning.
Well, some analysis you asked for. I use glibc-2.3.5-11 with libc6-dbg
installed.

export LD_LIBRARY_PATH=/usr/lib/debug
gdb /usr/sbin/apache
br _getopt_internal_r (it is called from getopt_long, here is the logic)
r -X
(breakpoint activated some times due to apache parameters)
I run the script calling rrd_graph and I'm inside:

#0  _getopt_internal_r (argc=22, argv=0x8141b78, 
    optstring=0xb78dcb10 "s:e:x:y:v:w:h:iu:l:rb:oc:n:m:t:f:a:I:zgjFYAMEX:L:S:T:NR:B:", longopts=0xb78f1a20, longind=0xbf81f324, long_only=0, d=0xb7d54400)
    at getopt.c:398

I set display for following expressions: argv[d->optind], d->optind,
d->optarg, optarg.

Stepping by next until getopt.c:451.

Some iteration of:
          while (d->optind < argc && NONOPTION_P)
            d->optind++;
and I have:
d->optind = 2
d->optarg = 0x0
optarg=0x0
argv[d->optind] = 0x8141be4 "--start"

Some steps inside the code. And, after getopt.c:679:
                d->optarg = argv[d->optind++];
I have:
3: d->optarg = 0x8141bfc "-2d"
2: d->optind = 4
1: argv[d->optind] = 0x8141c14 "--x-grid"

So far it's OK.
Still stepping.

Back to:
_getopt_internal (argc=22, argv=0x8141b78, 
    optstring=0xb7928b10 "s:e:x:y:v:w:h:iu:l:rb:oc:n:m:t:f:a:I:zgjFYAMEX:L:S:T:NR:B:", longopts=0xb793da20, longind=0xbfa6a7c4, long_only=0) at getopt.c:1169

There are three lines:
  optind = getopt_data.optind;
  optarg = getopt_data.optarg;
  optopt = getopt_data.optopt;

After executing those lines I have:

(gdb) print getopt_data.optind
$1 = 4
(gdb) print getopt_data.optarg
$2 = 0x8141bfc "-2d"

and (sic!):
(gdb) print optind
$4 = 4
(gdb) print optarg
$5 = 0x0

So, the question is: why the assignment in getopt.c:1170:
  optarg = getopt_data.optarg;
does not work?

I would like to remind you that getopt_long from libc works correctly
(details in this buglog) in most cases. But combination of apache, php4,
rrdtool and php4-rrdtool makes it unworking.

Regards
	Artur
-- 
zjadłam ruskie i barszcz ukraiński.
ciekawe czy od tego dostanę automatycznie złotych zębów
					/majaka/




More information about the pkg-php-maint mailing list