@@ -10,11 +10,13 @@ Closes #428
1010
1111Part-of: <https://gitlab.gnome.org/GNOME/libsoup/-/merge_requests/452>
1212Upstream Patch Reference: https://gitlab.gnome.org/GNOME/libsoup/-/merge_requests/452/diffs?commit_id=9bb92f7a685e31e10e9e8221d0342280432ce836
13+ https://gitlab.gnome.org/GNOME/libsoup/-/merge_requests/452/diffs?commit_id=eeace39ec686094ff6a05a43e5fce06e9c37f376
1314---
1415 libsoup/soup-message-headers.c | 1 +
16+ meson.build | 4 +
1517 tests/meson.build | 1 +
16- tests/server-mem-limit-test.c | 144 +++++++++++++++++++++++++++++++++
17- 3 files changed, 146 insertions(+)
18+ tests/server-mem-limit-test.c | 149 +++++++++++++++++++++++++++++++++
19+ 4 files changed, 155 insertions(+)
1820 create mode 100644 tests/server-mem-limit-test.c
1921
2022diff --git a/libsoup/soup-message-headers.c b/libsoup/soup-message-headers.c
@@ -29,8 +31,23 @@ index c5168ea..9123dc1 100644
2931 }
3032 }
3133 }
34+ diff --git a/meson.build b/meson.build
35+ index ff5dc95..5ed4125 100644
36+ --- a/meson.build
37+ +++ b/meson.build
38+ @@ -389,6 +389,10 @@ configinc = include_directories('.')
39+
40+ prefix = get_option('prefix')
41+
42+ + if get_option('b_sanitize') != 'none'
43+ + cdata.set_quoted('B_SANITIZE_OPTION', get_option('b_sanitize'))
44+ + endif
45+ +
46+ cdata.set_quoted('PACKAGE_VERSION', soup_version)
47+ cdata.set_quoted('LOCALEDIR', join_paths(prefix, get_option('localedir')))
48+ cdata.set_quoted('GETTEXT_PACKAGE', libsoup_api_name)
3249diff --git a/tests/meson.build b/tests/meson.build
33- index ff94a4f..d78df11 100644
50+ index 946395d..bf85f2b 100644
3451--- a/tests/meson.build
3552+++ b/tests/meson.build
3653@@ -89,6 +89,7 @@ tests = [
@@ -39,14 +56,14 @@ index ff94a4f..d78df11 100644
3956 {'name': 'server-auth'},
4057+ {'name': 'server-mem-limit'},
4158 {'name': 'server'},
42- {'name': 'sniffing'},
4359 {'name': 'sniffing',
60+ 'depends': [test_resources],
4461diff --git a/tests/server-mem-limit-test.c b/tests/server-mem-limit-test.c
4562new file mode 100644
46- index 0000000..98f1c40
63+ index 0000000..65dc875
4764--- /dev/null
4865+++ b/tests/server-mem-limit-test.c
49- @@ -0,0 +1,144 @@
66+ @@ -0,0 +1,149 @@
5067+ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
5168+ /*
5269+ * Copyright (C) 2025 Red Hat <www.redhat.com>
@@ -145,9 +162,9 @@ index 0000000..98f1c40
145162+ return;
146163+ #endif
147164+
148- + range = g_string_sized_new (99 * 1024);
165+ + range = g_string_sized_new (60 * 1024);
149166+ g_string_append (range, "bytes=1024");
150- + while (range->len < 99 * 1024)
167+ + while (range->len < 60 * 1024)
151168+ g_string_append (range, chunk);
152169+
153170+ session = soup_test_session_new (NULL);
@@ -175,14 +192,19 @@ index 0000000..98f1c40
175192+ {
176193+ int ret;
177194+
178- + test_init (argc, argv, NULL);
179- +
180- + #ifndef G_OS_WIN32
181- + struct rlimit new_rlimit = { 1024 * 1024 * 64, 1024 * 1024 * 64 };
195+ + /* a build with an address sanitizer may crash on mmap() with the limit,
196+ + thus skip the limit set in such case, even it may not necessarily
197+ + trigger the bug if it regresses */
198+ + #if !defined(G_OS_WIN32) && !defined(B_SANITIZE_OPTION)
199+ + struct rlimit new_rlimit = { 1024UL * 1024UL * 1024UL * 2UL, 1024UL * 1024UL * 1024UL * 2UL };
182200+ /* limit memory usage, to trigger too large memory allocation abort */
183201+ g_assert_cmpint (setrlimit (RLIMIT_DATA, &new_rlimit), ==, 0);
202+ + #else
203+ + g_message ("server-mem-limit-test: Running without memory limit");
184204+ #endif
185205+
206+ + test_init (argc, argv, NULL);
207+ +
186208+ g_test_add ("/server-mem/range-overlaps", ServerData, NULL,
187209+ server_setup, do_ranges_overlaps_test, server_teardown);
188210+
@@ -192,70 +214,5 @@ index 0000000..98f1c40
192214+ return ret;
193215+ }
194216- -
195- 2.34.1
196-
197-
198- From abedf4259b478b2ad5c33af36fb163b5ace821c0 Mon Sep 17 00:00:00 2001
199- From: Kevin Lockwood <v-klockwood@microsoft.com>
200- Date: Fri, 13 Jun 2025 09:57:54 -0700
201- Subject: [PATCH 2/2] server-mem-limit-test: Limit memory usage only when not
202- built witha sanitizer
203-
204- A build with -Db_sanitize=address crashes with failed mmap(), which is done
205- inside libasan. The test requires 20.0TB of virtual memory when running with
206- the sanitizer, which is beyond unsigned integer limits and may not trigger
207- the bug anyway.
208-
209- Part-of: <https://gitlab.gnome.org/GNOME/libsoup/-/merge_requests/452>
210- Upstream Patch Reference: https://gitlab.gnome.org/GNOME/libsoup/-/merge_requests/452/diffs?commit_id=eeace39ec686094ff6a05a43e5fce06e9c37f376
211- ---
212- meson.build | 4 ++++
213- tests/server-mem-limit-test.c | 13 +++++++++----
214- 2 files changed, 13 insertions(+), 4 deletions(-)
215-
216- diff --git a/meson.build b/meson.build
217- index ff5dc95..5ed4125 100644
218- --- a/meson.build
219- +++ b/meson.build
220- @@ -389,6 +389,10 @@ configinc = include_directories('.')
221-
222- prefix = get_option('prefix')
223-
224- + if get_option('b_sanitize') != 'none'
225- + cdata.set_quoted('B_SANITIZE_OPTION', get_option('b_sanitize'))
226- + endif
227- +
228- cdata.set_quoted('PACKAGE_VERSION', soup_version)
229- cdata.set_quoted('LOCALEDIR', join_paths(prefix, get_option('localedir')))
230- cdata.set_quoted('GETTEXT_PACKAGE', libsoup_api_name)
231- diff --git a/tests/server-mem-limit-test.c b/tests/server-mem-limit-test.c
232- index 98f1c40..65dc875 100644
233- --- a/tests/server-mem-limit-test.c
234- +++ b/tests/server-mem-limit-test.c
235- @@ -126,14 +126,19 @@ main (int argc, char **argv)
236- {
237- int ret;
238-
239- - test_init (argc, argv, NULL);
240- -
241- - #ifndef G_OS_WIN32
242- - struct rlimit new_rlimit = { 1024 * 1024 * 64, 1024 * 1024 * 64 };
243- + /* a build with an address sanitizer may crash on mmap() with the limit,
244- + thus skip the limit set in such case, even it may not necessarily
245- + trigger the bug if it regresses */
246- + #if !defined(G_OS_WIN32) && !defined(B_SANITIZE_OPTION)
247- + struct rlimit new_rlimit = { 1024UL * 1024UL * 1024UL * 2UL, 1024UL * 1024UL * 1024UL * 2UL };
248- /* limit memory usage, to trigger too large memory allocation abort */
249- g_assert_cmpint (setrlimit (RLIMIT_DATA, &new_rlimit), ==, 0);
250- + #else
251- + g_message ("server-mem-limit-test: Running without memory limit");
252- #endif
253-
254- + test_init (argc, argv, NULL);
255- +
256- g_test_add ("/server-mem/range-overlaps", ServerData, NULL,
257- server_setup, do_ranges_overlaps_test, server_teardown);
258-
259- - -
260- 2.34.1
217+ 2.45.4
261218
0 commit comments