108 Commits

Author SHA1 Message Date
John Thacker
9c27acd7a5 CMake: Unconditionally use 64-bit time_t on 32-bit glibc platforms
The GNU C library has support for 64-bit time_t on all architectures,
but default to 32-bit time_t on some 32-bit architectures (x86 and
ARM) unless the _TIME_BITS feature test macro is defined:

https://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html

Debian already does this when building packages. Most other platforms
that Wireshark can build on have 64-bit time_t already on all architectures;
one exception is FreeBSD on i386 (but not 32-bit ARM):

https://man.freebsd.org/cgi/man.cgi?arch

FreeBSD is dropping support for i386 for Release 15; Release 14 has an
EOL of Nov 2028. So at some point we could consider requiring 64-bit
time_t.

Ping #11744
2025-05-14 12:47:43 +00:00
John Thacker
d36771fdd7 CMake: Test that a trivial program compiles and runs
Test that the simplest possible C program runs. If this fails,
quit and tell the user. There's probably a permissions error or
antivirus or other security software not allowing unsigned code
to run that will cause problems with the build.

Fix #20170
2025-04-21 23:49:55 -04:00
John Thacker
88c5185240 dftest: Read (list of) filters from a file (inc. stdin)
dftest is very fast about compiling and testing filters;
almost all of its runtime is the startup procedure. Sometimes
you might have a large number of filters all of which need
to be checked for validity.

The existing dftest, like some of the other command line programs,
after processing options concatenates all the positional arguments
into one big string, with a single space between them. (Essentially
undoing word splitting.) That's convenient for not having to quote
filters, but makes it somewhat annoying to test multiple filters.
(Of course, multiple filters can be connected with logical operators.)

Add the ability to read a list of filters from a file line-by-line,
similar to grep and other programs. Allow specifying stdin with '-'.
(printf or other methods can be used to add newlines.) Perhaps an
ability to have a different delimiter could also be implemented.

For now, quit after the first failure. An option to keep going might
also have use cases.
2024-10-22 01:18:56 +00:00
Joakim Karlsson
489c0a69e8 CMake: Hardening compiler options
Hardened compiler option should give us a more secure application
against potential attacks and/or misbehavior

This is according to Best Practice from Open SSF
https://best.openssf.org/Compiler-Hardening-Guides/Compiler-Options-Hardening-Guide-for-C-and-C++
2024-08-23 09:24:33 +02:00
John Thacker
0cec46bb25 wsutil: Add a memrchr implementation
Use the system memrchr if found, otherwise use a very basic
non optimized implementation
2023-10-27 05:56:29 +00:00
John Thacker
f0df148413 wsutil: Do not use built in strcasestr
System implementations of strcasestr are locale dependent; even
though we always force to a UTF-8 locale, the Turkic languages
produce a different result, as the upper case of i is U+0130,
Latin Capital Letter I With Dot Above, and the lower case of I
is is U+0131, Latin Small Letter Dotless i.

For the purposes of dissectors we want the locale-independent ASCII
search. (There may be exceptions in some user-facing GUI code.)

FreeBSD, NetBSD, and macOS (but not OpenBSD currently) provide
strcasestr_l, which could be used with the NULL (C) locale to
produce the desired result.
2023-10-12 02:18:08 +00:00
Guy Harris
143533dfe0 Add a routine to format an nstime as an ISO 8601-style date/time.
This replaces code in both absolute_time_string(), in capinfos, and
set_abs_ymd_time(), in libwireshark.  Like absolute_time_string(), it
reports, in the formatted string, an error if the seconds value in the
nstime can't be converted to a struct tm (looking at *you*, Visual
Studio C library),

Have that routine handle all time precision values from 0 (seconds) to 9
(nanoseconds).

Add a ws_gmtime_r(), matching ws_localtime_r(), for use by that routine.
2023-09-11 09:25:00 +00:00
João Valverde
d72f620202 CMake: Add missing configure check for timegm()
We have code that conditionally uses timegm() in time_util.c,
but no configure check for it. Fix that.
2023-09-05 01:41:04 +00:00
João Valverde
fe802272a2 Build with NetBSD's strptime()
Replace our strptime code, which is from gnulib,
with the simpler and better NetBSD implementation.

This changes the ws_strptime() stub to unconditionally use
the internal implementation. Previously it would use the
system implementation of available. This is still possible
but is opt-in, i.e., code should add the necessary #ifdefs
and assume responsability for handling non-portable formats
or providing limited functionality on some platforms.

Text import allows the user to specify the strptime()
format freely, so in that case it makes sense to use the
system's implementation, and pass the responsability
for understanding the implementation and the supported
specifiers to the user.

Only fall back to our implementation if the system libc
lacks a strptime().
2023-09-03 18:05:59 +01:00
João Valverde
46f6febd47 Add portability wrapper for localtime_r() 2023-09-03 02:35:25 +00:00
João Valverde
b4f2980722 CMake: Fix a try_run() test when cross-compiling 2023-05-26 19:34:11 +00:00
João Valverde
14a1dfbe10 wsutil/inet_addr: Refactor to use C99/POSIX types
Rewrite ws_inet_pton{4,6} and ws_inet_ntop{4,6} without
GLib types.

Check for strerrorname_np() and use that is available,
to simplify error handling.

Add some minimal tests.
2021-12-27 19:02:50 +00:00
João Valverde
0d5bfd44a8 Use a wrapper function to call strptime()
Encapsulate the feature requirements for strptime() in a
portability wrapper.

Use _GNU_SOURCE to expose strptime. It should be enough on glibc
without the side-effect of selecting a particular SUS version,
which we don't need and might hide other definitions.
2021-12-27 14:07:32 +00:00
João Valverde
c11ceb08ed CMake: Fix timespec_get() detection on Windows
Replace some instances of check_function_exists() with
check_symbol_exists(). From the CMake documentation:

    - check_function_exists() can't detect functions that are inlined
    in headers or specified as a macro.
    - check_function_exists() can't detect anything in the 32-bit versions
    of the Win32 API, because of a mismatch in calling conventions.
    - check_function_exists() only verifies linking, it does not verify
    that the function is declared in system headers.

This fixes timespec_get() detection on Windows.
2021-12-27 12:16:05 +00:00
João Valverde
8cc527cce3 wmem: Use vasprintf()
Use vasprintf(3) if available to optimize wmem_stdup_printf().
2021-12-18 23:16:38 +00:00
João Valverde
fe30cf2f8a wsutil: Add portability wrapper for clock_gettime(CLOCK_REALTIME) 2021-12-15 15:00:59 +00:00
João Valverde
ef8125e3ae Move two functions from epan to wsutil/str_util
Move epan_memmem() and epan_strcasestr() to wsutil/str_util.
Rename to ws_memmem() and ws_strcasestr(). Add compile time
check for a system implementation and use that if available.

We invoke those functions using a wrapper to avoid exposing
_GNU_SOURCE outside of the implementation.
2021-11-28 12:32:51 +00:00
João Valverde
b30a2112e8 regex: Prefer C99/POSIX types
Replace 'gssize' with 'ssize_t'.

Add a CMake configure check for ssize_t.

Fix missing "config.h" includes.
2021-11-15 02:41:59 +00:00
João Valverde
fa525649be CMake: Try to set a required try_run() definition in a more idiomatic way
This is applicable to every test (if we had more), not just HAVE_C99_VSNPRINTF.

Could also be a #define but let's go with this for now. This takes
advantage of the stack based design of CMakePushCheckState.
2021-09-22 16:34:37 +00:00
João Valverde
6921f01250 MinGW-w64: Need to use ANSI C stdio
Defining _POSIX enables __USE_MINGW_ANSI_STDIO, this switches the
stdio API from Microsoft to MinGW internal (ANSI C).
2021-09-22 14:37:13 +01:00
João Valverde
5de2b55663 CMake: Check if vsnprinf() is C99-compliant 2021-09-22 12:10:27 +00:00
João Valverde
3164d4a646 MinGW-w64: Use clock_gettime()
Mingw-w64 has this function. We may have to define some extra symbols
for API visibility but on my system the config check is working out
of the box.

POSIX systems come in many flavours, remove the "save time" if()
condition in this case.

Fix code to check if we have clock_gettime() on Windows as well.
2021-09-21 05:56:34 +00:00
João Valverde
8df2a73594 Use the musl in-tree getopt_long() everywhere
Besides the obvious limitation of being unavailable on Windows,
the standard is vague about getopt() and getopt_long() has many
non-portable pitfalls and buggy implementations, that increase
the maintainance cost a lot. Also the GNU libc code currently
in the tree is not suited for embedding and is unmaintainable.

Own maintainership for getopt_long() and use the musl implementation
everywhere. This way we don't need to worry if optreset is available,
or if the $OPERATING_SYSTEM version behaves in subtly different ways.

The API is under the Wireshark namespace to avoid conflicts with
system headers.

Side-note, the Mingw-w64 9.0 getopt_long() implementation is buggy
with opterr and known to crash. In my experience it's a headache to
use the embedded getopt implementation if the system provides one.
2021-09-17 00:43:54 +01:00
Gerald Combs
a2718d0d22 CMake: Remove no-longer-used checks.
The following commits removed code that required the following defines,
so remove them:

c0711693ab HAVE_GETOPT_H (Partial; still required by CMake)
2925fb0850 HAVE_MKSTEMPS
0c889d6f5c HAVE_SYS_IOCTL_H
0c889d6f5c HAVE_SYS_SOCKIO_H
0c889d6f5c HAVE_STRUCT_SOCKADDR_SA_LEN
9c5049a80b HAVE_STRUCT_STAT_ST_FLAGS
2021-07-15 15:03:53 -07:00
Gerald Combs
34ef2066e5 CMake: Don't bother checking for fcntl.h or floorl.
fcntl.h appears to be available on all of our supported platforms,
including Windows. We've also been including it without HAVE_FCNTL_H
guards in a few places (e.g. sshdump.c) without any issues for some
time.

floorl is part of C99.
2021-07-15 06:41:05 +00:00
Guy Harris
ca99a821b4 Fix the way we get high-resolution time.
If we're not on Windows, use clock_gettime(CLOCK_REALTIME) *if* we have
it; otherwise, fall back on gettimeofday().

(Note: neither Linux, nor macOS, nor Windows necessarily "have"
particular APIs; particular *versions* of Linux distributions
(kernel+libc) have them, particular *versions* of macOS have them, and
particular *versions* of Windows+MSVC have them.

And Linux, Windows and macOS aren't the only platforms on which we run.)

Fixes #17101.
2020-12-20 13:31:57 -08:00
Guy Harris
20800366dd HTTPS (almost) everywhere.
Change all wireshark.org URLs to use https.

Fix some broken links while we're at it.

Change-Id: I161bf8eeca43b8027605acea666032da86f5ea1c
Reviewed-on: https://code.wireshark.org/review/34089
Reviewed-by: Guy Harris <guy@alum.mit.edu>
2019-07-26 18:44:40 +00:00
Anders Broman
101fed9420 Cmake: Make it possible to check on HAVE_STRUCT_STAT_ST_BLKSIZE.
Change-Id: Id84adc85c1fbdef8e39240f55128cdec4ee9ca2f
Reviewed-on: https://code.wireshark.org/review/31324
Petri-Dish: Anders Broman <a.broman58@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Martin Kaiser <wireshark@kaiser.cx>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
2019-03-10 12:34:41 +00:00
Guy Harris
a5d3079b07 ifaddrs.h may require sys/types.h to be included first.
That's the case on DragonFly BSD 5.2.1, at least.

Change-Id: I8bbd51462d74380004c611183f4b9229f4d20ff6
Reviewed-on: https://code.wireshark.org/review/27913
Reviewed-by: Guy Harris <guy@alum.mit.edu>
2018-05-30 20:35:39 +00:00
Guy Harris
d08d0a87c5 Eliminate some unneeded header checks.
sys/stat.h and sys/types.h date back to V7 UNIX, so they should be
present on all UN*Xes, and we're assuming they're available on Windows,
so, unless and until we ever support platforms that are neither UN*Xes
nor Windows, we don't need to check for them.

Remove the CMake checks for them, remove the HAVE_ values from
cmakeconfig.h.in, and remove all tests for the HAVE_ values.

Change-Id: I90bb2aab37958553673b03b52f4931d3b304b9d0
Reviewed-on: https://code.wireshark.org/review/27603
Petri-Dish: Guy Harris <guy@alum.mit.edu>
Tested-by: Petri Dish Buildbot
Reviewed-by: Guy Harris <guy@alum.mit.edu>
2018-05-16 22:03:09 +00:00
Gerald Combs
1feea92ef3 CMake: Skip more header checks on Windows.
Prepopulate our header variables at the top of CMakeLists.txt. Add
HAVE_STDINT_H and HAVE_STDDEF_H.

Change-Id: I78cbe9d6dc3775caad5c565de0100863a9dc8054
Reviewed-on: https://code.wireshark.org/review/27587
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot
Reviewed-by: Gerald Combs <gerald@wireshark.org>
2018-05-16 18:41:21 +00:00
Guy Harris
41445d0e97 Use dlget() and dlgetname() to get the executable path name on HP-UX.
That leaves only AIX (and, if we're looking at dead UN*Xes, IRIX and
Tru64 UNIX) as platforms on which we can't fetch that.

Change-Id: If7a6a425aba30e1abf82ecc66f6c28dc532a227c
Reviewed-on: https://code.wireshark.org/review/27358
Reviewed-by: Guy Harris <guy@alum.mit.edu>
2018-05-05 06:40:19 +00:00
Guy Harris
f447aa7dd7 On Solaris, check for getexecname in CMake.
We expect it to be checked for in wsutil/filesystem.c, so we should
check for it.  It's a Solarisism, so check for it only on Solaris.

Change-Id: I09104c17d2ec91c74862b63e735c32a9d188f2a6
Reviewed-on: https://code.wireshark.org/review/27351
Reviewed-by: Guy Harris <guy@alum.mit.edu>
2018-05-05 06:01:05 +00:00
Joakim Karlsson
5994c902b4 cmake: remove warnings -Werror=old-style-definition
see https://cmake.org/Bug/bug_relationship_graph.php?bug_id=15058

Change-Id: I325f476b145a542e987a13bedd1f95a7d8faba94
Reviewed-on: https://code.wireshark.org/review/27121
Petri-Dish: Guy Harris <guy@alum.mit.edu>
Tested-by: Petri Dish Buildbot
Reviewed-by: Guy Harris <guy@alum.mit.edu>
2018-04-24 19:19:23 +00:00
Gerald Combs
1d030928ef Remove some GTK+-only code.
Change-Id: Ic2498c7acd6a1a522be45094148402ee34a6b4d1
Reviewed-on: https://code.wireshark.org/review/26958
Reviewed-by: Gerald Combs <gerald@wireshark.org>
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
2018-04-17 03:44:47 +00:00
Guy Harris
d12a41b17a Include alloca.h if we have it.
Bug: 14552
Change-Id: I799691f7f33ca56748ed4e51d7d548f37769837b
Reviewed-on: https://code.wireshark.org/review/26611
Petri-Dish: Guy Harris <guy@alum.mit.edu>
Tested-by: Petri Dish Buildbot
Reviewed-by: Guy Harris <guy@alum.mit.edu>
2018-03-23 22:39:07 +00:00
Gerald Combs
0874b8bac6 Remove popcount in favor of ws_count_ones.
Remove our popcount implementation in favor of ws_count_ones, which
is our other popcount implementation. This required updating and
running process-x11-xcb.pl.

Change-Id: I8634c55242113b338c5b0173837c35f98b148b4f
Reviewed-on: https://code.wireshark.org/review/26454
Reviewed-by: Gerald Combs <gerald@wireshark.org>
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
2018-03-13 17:18:01 +00:00
Gerald Combs
1915ce6133 CMake: Skip some header checks on Windows.
Skip some header checks on Windows when we're sure they will always
be true.

Change-Id: I4ff7c867b9268a53692085553055dcbc0f90ae1d
Reviewed-on: https://code.wireshark.org/review/26452
Reviewed-by: Gerald Combs <gerald@wireshark.org>
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
2018-03-13 06:07:25 +00:00
Gerald Combs
2519115695 Remove some unused or hard-coded header checks.
Remove some unused checks and code found using

grep -o 'HAVE_[A-Z0-9_]*' ConfigureChecks.cmake | sort -u \
| while read have_h ; do echo = $have_h ; git --no-pager grep -cl $have_h ; done

Change-Id: I86bfcfdc4f60d9d7de87017a7bb00f833a79bd2c
Reviewed-on: https://code.wireshark.org/review/26451
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot
Reviewed-by: Gerald Combs <gerald@wireshark.org>
2018-03-12 22:11:32 +00:00
Dario Lombardo
8a5385b9c9 More licenses converted to SPDX.
Change-Id: Id4f987dcdacf06622d70263f4659a4400e30dc39
Reviewed-on: https://code.wireshark.org/review/26332
Petri-Dish: Dario Lombardo <lomato@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
2018-03-07 13:35:49 +00:00
Dan Robertson
9ff64c8d7c musl: compile with musl libc
Ensure that wsutil/ws_pipe.c includes <sys/select.h> as as both
the timeval struct and the select function are used.

Change-Id: Idbd9e9a5b9cbee9977a423c32e55be81bb6425c3
Reviewed-on: https://code.wireshark.org/review/25616
Petri-Dish: Jaap Keuter <jaap.keuter@xs4all.nl>
Tested-by: Petri Dish Buildbot
Reviewed-by: Guy Harris <guy@alum.mit.edu>
2018-02-10 17:40:50 +00:00
João Valverde
0527747e23 Retire use of getprotobynumber()
Dead weight. If this feature is wanted getprotobynumber()
should be called once on startup.

Change-Id: I0358bacdc60466f676fa1aab7f4b7c9e588d8d74
Reviewed-on: https://code.wireshark.org/review/24045
Petri-Dish: João Valverde <j@v6e.pt>
Tested-by: Petri Dish Buildbot
Reviewed-by: João Valverde <j@v6e.pt>
2017-10-29 00:20:47 +00:00
Gerald Combs
b331641f98 CMake: Remove unused header checks.
Remove the following unused header checks and defines:

HAVE_INTTYPES_H
HAVE_STDINT_H
HAVE_STRINGS_H
HAVE_SYSCONF

Change-Id: I9f1307ead09c6800697004e7f79f5ac637eea3f7
Reviewed-on: https://code.wireshark.org/review/24067
Reviewed-by: Gerald Combs <gerald@wireshark.org>
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
2017-10-26 07:10:26 +00:00
Gerald Combs
bfad9c56f9 CMake: Don't check for windows.h or winsock2.h.
If we're building on Windows we're going to have windows.h and
winsock2.h. Don't bother checking for them.

Change-Id: I0004c44d7364ab3f41682f34b8c84cd8617c9603
Reviewed-on: https://code.wireshark.org/review/24068
Reviewed-by: Gerald Combs <gerald@wireshark.org>
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
2017-10-26 07:08:41 +00:00
João Valverde
eae216ef1d Remove replacement inet_pton/inet_ntop
Should be available on every platform we support.

Change-Id: Ib65d78e351d22d581b427e5e93fc8d5e5348b260
Reviewed-on: https://code.wireshark.org/review/24047
Reviewed-by: Gerald Combs <gerald@wireshark.org>
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot
Reviewed-by: Michael Mann <mmann78@netscape.net>
2017-10-25 21:03:56 +00:00
João Valverde
90644c8372 Remove inet_aton() usage everywhere
Including where it says not to in comments. Use IPv4 dotted-decimal
notation.

Change-Id: Iafe1f6fbd2bd5867c41642dc27411f47dff8ce6a
Reviewed-on: https://code.wireshark.org/review/24044
Petri-Dish: João Valverde <j@v6e.pt>
Tested-by: Petri Dish Buildbot
Reviewed-by: João Valverde <j@v6e.pt>
2017-10-25 19:10:57 +00:00
João Valverde
e1ef8e5f75 Test g_printf() thousands grouping flag at runtime
This tests the runtime environment so avoid hard-coding it during the build.

For now we avoid messing with locales for the test, unless it turns out to
be necessary (ISO C printf behaviour with invalid conversion specifier is
undefined).

Change-Id: I341c2ab5e716973689cf9002f13435404a41369f
Reviewed-on: https://code.wireshark.org/review/24038
Petri-Dish: João Valverde <j@v6e.pt>
Tested-by: Petri Dish Buildbot
Reviewed-by: João Valverde <j@v6e.pt>
2017-10-24 22:00:46 +00:00
Guy Harris
5f68435a07 Fix the #defines for the presence of structure names.
AC_CHECK_MEMBER() and AC_CHECK_MEMBERS() use a standard name for the
{structurename} being the name of the structure type, complete with
"struct" if a typedef wasn't used, and with all letters mapped to upper
case, and with {membername} being the name of the structure member, with
all letters mapped to upper case.

check_struct_has_member() lets you choose the name; choose the same name
that the autoconf macros use, and fix the code to check for them.

Change-Id: Ifb3cf65e7e94907ad0a2f8aacca0c21a531f0c5b
Reviewed-on: https://code.wireshark.org/review/18382
Petri-Dish: Guy Harris <guy@alum.mit.edu>
Reviewed-by: Guy Harris <guy@alum.mit.edu>
2016-10-22 09:53:19 +00:00
Guy Harris
528894e72f On UN*X, st_ctime is the last status change time, not the creation time.
That's the time the file's inode last changed, so size changes,
permission changes, etc. affect it.  It's *not* the time the file was
created; most UN*Xes don't provide that.  Newer versions of FreeBSD,
NetBSD, OpenBSD, and macOS do, but other UN*Xes don't appear to.

On Windows, at least according to Microsoft's documentation, st_ctime
*is* the creation time.  Hopefully that's not the result of confusion on
the part of somebody at Microsoft.

Change-Id: I20743703f6ef66e40dff9004dc91bed46af6fad0
Reviewed-on: https://code.wireshark.org/review/18378
Reviewed-by: Guy Harris <guy@alum.mit.edu>
2016-10-22 05:20:22 +00:00
Michael Mann
acc018b8d1 Allow create_tempfile to support a suffix.
Ping-Bug: 10203
Change-Id: Ifa24870d711449b87e9839dd46af614e4aa28fde
Reviewed-on: https://code.wireshark.org/review/15608
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Martin Mathieson <martin.r.mathieson@googlemail.com>
2016-06-01 06:24:05 +00:00