From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,NICE_REPLY_A autolearn=ham autolearn_force=no version=3.4.4 Received: from blvuug.org (hurricane.the-brannons.com [IPv6:2602:ff06:725:1:20::25]) by inbox.vuxu.org (Postfix) with ESMTP id 34C93296BC for ; Fri, 5 Apr 2024 13:14:41 +0200 (CEST) Received: from hurricane (localhost.localdomain [127.0.0.1]) by blvuug.org (OpenSMTPD) with ESMTP id 5f243a43 for ; Fri, 5 Apr 2024 11:14:40 +0000 (UTC) Received: from mail.pcdesk.net (mail.pcdesk.net [69.28.94.151]) by hurricane.the-brannons.com (OpenSMTPD) with ESMTPS id 84906896 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO) for ; Fri, 5 Apr 2024 11:14:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pcdesk.net; s=pcdesk20210713; t=1712315676; bh=suqSUJ8UamrS59CLJjOgJCQByBlt/T92eOXKGJW9li0=; h=Date:Subject:To:References:From:In-Reply-To; b=taM8LHDbEa5buSqYGGV9LIfgTGo7WuNukit2A6mwBhP5/gLZa6kMoMf1uF2yzxQ0T lHFtSWNiKQlK6XlvWYVneVw+KGPkj/itFHS9tobMZfLAJvWRZP+AfmzN2NaoQRZyF3 LN6AbLXkfswidMBhwLVZY0NIX6kXOeb8ZXL4nCchD3xuSbaoJUFakK5JxebYmnYbhF sFpJnaAE/tU0pNffsH+V20YBpsbgEvkJSnpmybdaOHmQBR6DgkAixfdM4ZxB79N37T +SGXI8MfZ3TL3iIRRUdeeTufaOb5ViVvL/2joALyReBVNfHfEP9Hm9gNjCbTXscRjv G0SvvHCaZv21w== Original-Subject: Re: uninitialized globals Author: Tyler Spivey Message-ID: <8402d7da-8632-5fd7-131e-fa5ea343e386@pcdesk.net> Date: Fri, 5 Apr 2024 04:14:34 -0700 X-BeenThere: edbrowse-dev@edbrowse.org List-Id: Edbrowse Development List MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: uninitialized globals Content-Language: en-US To: edbrowse-dev@edbrowse.org References: <20240305042901.eklhad@comcast.net> From: Tyler Spivey In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit How do I reproduce this? I tried: dpkg-buildflags --export=sh > export.out source export.out make clean && make But edbrowse doesn't crash for me. This is on a new Debian 12.5 machine. On 4/5/2024 3:43 AM, Sebastian Humenda wrote: > Hi > > Pardon, I should have sent it to the list. > > Karl Dahlke schrieb am 05.04.2024, 4:29 -0400: >> the latest edbrowse 3.8.9 on Debian, compiled with GCC 12.2. It segfaults on >> startup, and the backtrace suggests it is in main.c:1926, where it nzFree's > […] > […] > > An excerpt of the build output is below this e-mail; it includes the build > flags. > >> I am rather stunned by this. I have been using C since 1980. Ever since the >> original K&R, global uninitialized variables are 0. I don't understand how > […] > > I am bored by C standards and alike. I have been writing MISRA C for several > years and I do remember the checkre requiring us to initialise explicitly > every static (i.e. global) as its initialisation was either depending on the > type or implementation defined, I do not recall. > > Here is what nm says: > > % nm src/edbrowse | grep 'sslCerts' > 0000000000247088 D sslCerts > > % nm src/edbrowse | fgrep allowJS > % nm src/edbrowse | fgrep allowJS > > 0000000000247079 D allowJS > >> but that's not simple because there are dozens of global variables, and some >> static variables too, that are not initialized, that I count on being zero. >> If we got past sslCerts we would just run into another one. We'd have to > […] > > Agreed. I actually just looked whether I can call up my.test.website and with > this set, it worked :). I actually was trying out the QuicJS support. > > Cheers > Sebastian > > === Build Output > cc -g -O2 -ffile-prefix-map=/tmp/edbrowse=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-unused -D_FILE_OFFSET_BITS=64 -DEDBROWSE_ON_LINUX -I/usr/include/x86_64-linux-gnu -g -ggdb -Wextra -Wdate-time -D_FORTIFY_SOURCE=2 -c -o dbodbc.o dbodbc.c > isup.c: In function ‘decodePostData’: > isup.c:1276:30: warning: ‘c’ may be used uninitialized [-Wmaybe-uninitialized] > 1276 | *w++ = c; > | ~~~~~^~~ > isup.c:1230:14: note: ‘c’ was declared here > 1230 | char c; > | ^ > css.c: In function ‘hashSortCrunch’: > css.c:3222:37: warning: ‘j’ may be used uninitialized [-Wmaybe-uninitialized] > 3222 | mark->body[j++] = v->t; > | ~^~ > css.c:3202:16: note: ‘j’ was declared here > 3202 | int i, j, distinct = 0; > | ^ > css.c: In function ‘do_rules’: > css.c:3106:9: warning: ‘tn’ may be used uninitialized [-Wmaybe-uninitialized] > 3106 | set_property_bool_t(tn, "inj$css", true); > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > css.c:2957:20: note: ‘tn’ was declared here > 2957 | const Tag *tn; // the text node that holds before or after text > | ^~ > dbops.c: In function ‘stringDate’: > dbops.c:505:17: warning: ‘__builtin_strncpy’ output may be truncated copying 4 bytes from a string of length 7 [-Wstringop-truncation] > 505 | strncpy(buf, buf + 4, 4); > | ^ > dbodbc.c: In function ‘retsFromOdbc’: > dbodbc.c:937:30: warning: ‘input_length’ may be used uninitialized [-Wmaybe-uninitialized] > 937 | rc = SQLGetData(hstmt, (ushort) (i + 1), > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > 938 | c_type, q1, input_length, > | ~~~~~~~~~~~~~~~~~~~~~~~~~ > 939 | &output_length); > | ~~~~~~~~~~~~~~~ > dbodbc.c:827:14: note: ‘input_length’ was declared here > 827 | long input_length, output_length; > | ^~~~~~~~~~~~ > dbodbc.c:937:30: warning: ‘c_type’ may be used uninitialized [-Wmaybe-uninitialized] > 937 | rc = SQLGetData(hstmt, (ushort) (i + 1), > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > 938 | c_type, q1, input_length, > | ~~~~~~~~~~~~~~~~~~~~~~~~~ > 939 | &output_length); > | ~~~~~~~~~~~~~~~ > dbodbc.c:826:15: note: ‘c_type’ was declared here > 826 | short c_type; /* C data type */ > | ^~~~~~ > dbops.c: In function ‘stringTime’: > dbops.c:636:28: warning: ‘c’ may be used uninitialized [-Wmaybe-uninitialized] > 636 | if (c == 'A') > | ^ > dbops.c:593:14: note: ‘c’ was declared here > 593 | char c; > | ^ > css.c: In function ‘cssParseLeft’: > css.c:1336:52: warning: ‘sel2’ may be used uninitialized [-Wmaybe-uninitialized] > 1336 | sel2->next = sel, sel2 = sel; > | ~~~~~~~~~~~^~~~~ > css.c:1258:21: note: ‘sel2’ was declared here > 1258 | struct sel *sel2; > | ^~~~ > dbodbc.c: In function ‘oneRetValue.constprop’: > dbodbc.c:1114:19: warning: ‘f’ may be used uninitialized [-Wmaybe-uninitialized] > 1114 | n = f; > | ~~^~~ > dbodbc.c:1097:16: note: ‘f’ was declared here > 1097 | double f; > | ^ > dbodbc.c:1126:19: warning: ‘c’ may be used uninitialized [-Wmaybe-uninitialized] > 1126 | n = c; > | ~~^~~ > dbodbc.c:1095:14: note: ‘c’ was declared here > 1095 | char c; > | ^ > dbodbc.c:1133:16: warning: ‘n’ may be used uninitialized [-Wmaybe-uninitialized] > 1133 | return n; > | ^ > dbodbc.c:1096:14: note: ‘n’ was declared here > 1096 | long n; > | ^ > dbops.c: In function ‘lineFormatStack’: > dbops.c:191:40: warning: ‘dn’ may be used uninitialized [-Wmaybe-uninitialized] > 191 | (pdir == 'f' && dn == nullfloat) || > dbops.c:101:16: note: ‘dn’ was declared here > 101 | double dn; /* double number */ > | ^~ > dbops.c:189:37: warning: ‘n’ may be used uninitialized [-Wmaybe-uninitialized] > 189 | if ((pdir == 'c' && !n) || > | ^~ > dbops.c:100:14: note: ‘n’ was declared here > 100 | long n; > | ^ > css.c: In function ‘cssPieces’: > css.c:1008:42: warning: ‘d2’ may be used uninitialized [-Wmaybe-uninitialized] > 1008 | d2->next = d, d2 = d; > | ~~~~~~~~~^~~ > css.c:802:31: note: ‘d2’ was declared here > 802 | struct desc *d1 = 0, *d2, *d = 0; > | ^~ > In function ‘uncomment’, > inlined from ‘cssPieces’ at css.c:815:2: > css.c:176:56: warning: ‘url0’ may be used uninitialized [-Wmaybe-uninitialized] > 176 | *w++ = *u; > | ^~ > css.c: In function ‘cssPieces’: > css.c:147:23: note: ‘url0’ was declared here > 147 | char *w = s, *url0; > | ^~~~ > cc -I/usr/include/quickjs -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -ffile-prefix-map=/tmp/edbrowse=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-unused -D_FILE_OFFSET_BITS=64 -DEDBROWSE_ON_LINUX -I/usr/include/x86_64-linux-gnu -g -ggdb -Wextra -c jseng-quick.c > In function ‘cursor_comm’, > inlined from ‘syncup_table’ at dbops.c:2051:2: > dbops.c:1945:31: warning: ‘sortval2’ may be used uninitialized [-Wmaybe-uninitialized] > 1943 | ((sorttype == 'S' > | ~~~~~~~~~~~~~~~~~ > 1944 | && strcmp(sortstring1, sortstring2) < 0) > | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > 1945 | || (sorttype != 'S' && sortval1 < sortval2)))) { > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > dbops.c: In function ‘syncup_table’: > dbops.c:1835:23: note: ‘sortval2’ was declared here > 1835 | int sortval1, sortval2; > | ^~~~~~~~ > In function ‘cursor_comm’, > inlined from ‘syncup_table’ at dbops.c:2051:2: > dbops.c:1945:31: warning: ‘sortval1’ may be used uninitialized [-Wmaybe-uninitialized] > 1943 | ((sorttype == 'S' > | ~~~~~~~~~~~~~~~~~ > 1944 | && strcmp(sortstring1, sortstring2) < 0) > | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > 1945 | || (sorttype != 'S' && sortval1 < sortval2)))) { > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > dbops.c: In function ‘syncup_table’: > dbops.c:1835:13: note: ‘sortval1’ was declared here > 1835 | int sortval1, sortval2; > | ^~~~~~~~ > css.c: In function ‘qsaMatch’: > css.c:2387:28: warning: ‘rc’ may be used uninitialized [-Wmaybe-uninitialized] > 2387 | if (rc) > | ^ > css.c:2100:14: note: ‘rc’ was declared here > 2100 | bool rc; > | ^~ > In file included from /usr/include/quickjs/quickjs-libc.h:30, > from jseng-quick.c:18: > /usr/include/quickjs/quickjs.h: In function ‘JS_NewCFunctionMagic’: > /usr/include/quickjs/quickjs.h:969:34: warning: cast between incompatible function types from ‘JSValue (*)(JSContext *, JSValue, int, JSValue *, int)’ to ‘JSValue (*)(JSContext *, JSValue, int, JSValue *)’ [-Wcast-function-type] > 969 | return JS_NewCFunction2(ctx, (JSCFunction *)func, name, length, cproto, magic); > | ^ > cc -g -O2 -ffile-prefix-map=/tmp/edbrowse=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-unused -D_FILE_OFFSET_BITS=64 -DEDBROWSE_ON_LINUX -I/usr/include/x86_64-linux-gnu -g -ggdb -Wextra -Wdate-time -D_FORTIFY_SOURCE=2 -c -o ebrc.o ebrc.c > cc -g -O2 -ffile-prefix-map=/tmp/edbrowse=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-unused -D_FILE_OFFSET_BITS=64 -DEDBROWSE_ON_LINUX -I/usr/include/x86_64-linux-gnu -g -ggdb -Wextra -Wdate-time -D_FORTIFY_SOURCE=2 -c -o msg-strings.o msg-strings.c > jseng-quick.c: In function ‘setup_window_2’: > jseng-quick.c:3787:9: warning: ignoring return value of ‘asprintf’ declared with attribute ‘warn_unused_result’ [-Wunused-result] > 3787 | asprintf(&wpc, "Wp`Set@%s", cf->fileName); > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > jseng-quick.c: In function ‘set_basehref’: > jseng-quick.c:4448:17: warning: ignoring return value of ‘asprintf’ declared with attribute ‘warn_unused_result’ [-Wunused-result] > 4448 | asprintf(&wpc, "Wp`Set@%s", h); > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > cc -g -O2 -ffile-prefix-map=/tmp/edbrowse=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-unused -D_FILE_OFFSET_BITS=64 -DEDBROWSE_ON_LINUX -I/usr/include/x86_64-linux-gnu -g -ggdb -Wextra -Wdate-time -D_FORTIFY_SOURCE=2 -c -o startwindow.o startwindow.c > jseng-quick.c: In function ‘embedNodeName’: > jseng-quick.c:2012:17: warning: ‘__builtin___strncpy_chk’ specified bound depends on the length of the source argument [-Wstringop-truncation] > 2012 | strncpy(b, nodeName, length); > | ^ > jseng-quick.c:2009:26: note: length computed here > 2009 | length = strlen(nodeName); > | ^~~~~~~~~~~~~~~~ > cc main.o buffers.o sendmail.o fetchmail.o html.o html-tags.o format.o stringfile.o ebrc.o msg-strings.o http.o isup.o css.o startwindow.o dbops.o dbodbc.o jseng-quick.o /usr/lib/x86_64-linux-gnu/quickjs/libquickjs.a -ldl -latomic -Wl,-z,relro -Wl,-z,now -lcurl -lodbc -lpcre2-8 -lreadline -lssl -lcrypto -lpthread -lm -lssl -lcrypto -o edbrowse