On Fri, Jun 12, 2015 at 08:35:15AM +0200, Willy Tarreau wrote:
> On Fri, Jun 12, 2015 at 08:27:34AM +0200, joris dedieu wrote:
> (...)
> > All those one are innocents. Including sys/limits.h on common/compat.h
> > correct  those differences and not the segfault.
> 
> OK. Please use limits.h instead as sys/limits.h is not present on all
> systems.
> 
> I'm thinking about something else you can test, which is to verify all
> objects sizes. You need to build with and without the patch, then you
> can diff the outputs and check whether some structures would have a
> different size. This could help spot the culprit :
> 
>  $ find . -name '*.o' | sort | xargs nm --size-sort

When doing this here, I found something troubling :

(joris.out is your version with the revert)

--- normal.out  2015-06-12 08:37:00.828256778 +0200
+++ joris.out   2015-06-12 08:36:41.509255648 +0200
@@ -91,6 +91,7 @@
 
 ./src/auth.o:
 00000004 B userlist
+00000006 C localtimezone
 00000041 T auth_find_userlist
 00000050 T check_group
 00000088 T check_user
@@ -1002,7 +1003,7 @@
 00000020 T tcp_req_cont_keywords_register
 00000020 T tcp_res_cont_keywords_register
 00000027 t port_range_release_port
-00000028 r CSWTCH.124
+00000028 r CSWTCH.122
 00000039 t bind_parse_defer_accept
 00000039 t bind_parse_transparent
 00000039 T tcp_get_src
@@ -1545,7 +1546,7 @@
 00000008 C date
 00000008 C now
 00000008 C start_date
-00000008 b tv_offset.4129
+00000008 b tv_offset.3989
 00000024 T _tv_isgt
 00000024 T _tv_isle
 0000002f T _tv_ms_elapsed
@@ -1562,6 +1563,7 @@
 0000023f T tv_update_date
 
 ./src/uri_auth.o:
+00000006 C localtimezone
 0000001e T stats_set_flag
 0000001e T stats_set_refresh
 0000005a T stats_set_realm

As you can see, "localtimezone" moves to another file. Guess what ?
it's an array of 6 chars which is defined in standard.h ! That's
completely bogus, I wonder where that comes from!

I would not be surprized if you have a similarly named variable on
FreeBSD which is of a smaller size and which gets overwritten when
this variable is modified.

Please could you try to rename it as a quick test ? It only appears
at 3 locations :

$ git grep -n localtimezone
include/common/standard.h:827:char localtimezone[6];
src/haproxy.c:588:      strftime(localtimezone, 6, "%z", &curtime);
src/standard.c:2340:    memcpy(dst, localtimezone, 5); // timezone

Willy


Reply via email to