Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package memcached for openSUSE:Factory checked in at 2026-07-09 22:18:01 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/memcached (Old) and /work/SRC/openSUSE:Factory/.memcached.new.1991 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "memcached" Thu Jul 9 22:18:01 2026 rev:75 rq:1364335 version:1.6.44 Changes: -------- --- /work/SRC/openSUSE:Factory/memcached/memcached.changes 2026-05-30 22:54:15.202711733 +0200 +++ /work/SRC/openSUSE:Factory/.memcached.new.1991/memcached.changes 2026-07-09 22:18:11.195691713 +0200 @@ -1,0 +2,7 @@ +Tue Jul 7 15:27:51 UTC 2026 - Marcus Rueckert <[email protected]> + +- update to 1.6.44: + https://github.com/memcached/memcached/wiki/ReleaseNotes1644 + https://github.com/memcached/memcached/wiki/ReleaseNotes1643 + +------------------------------------------------------------------- Old: ---- memcached-1.6.42.tar.gz New: ---- memcached-1.6.44.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ memcached.spec ++++++ --- /var/tmp/diff_new_pack.iv7BCN/_old 2026-07-09 22:18:13.675775831 +0200 +++ /var/tmp/diff_new_pack.iv7BCN/_new 2026-07-09 22:18:13.679775967 +0200 @@ -42,7 +42,7 @@ %endif %endif Name: memcached -Version: 1.6.42 +Version: 1.6.44 Release: 0 Summary: A high-performance, distributed memory object caching system License: BSD-3-Clause ++++++ memcached-1.6.42.tar.gz -> memcached-1.6.44.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.42/configure new/memcached-1.6.44/configure --- old/memcached-1.6.42/configure 2026-05-19 00:14:10.000000000 +0200 +++ new/memcached-1.6.44/configure 2026-07-07 06:24:04.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.72 for memcached 1.6.42. +# Generated by GNU Autoconf 2.72 for memcached 1.6.44. # # Report bugs to <[email protected]>. # @@ -604,8 +604,8 @@ # Identity of this package. PACKAGE_NAME='memcached' PACKAGE_TARNAME='memcached' -PACKAGE_VERSION='1.6.42' -PACKAGE_STRING='memcached 1.6.42' +PACKAGE_VERSION='1.6.44' +PACKAGE_STRING='memcached 1.6.44' PACKAGE_BUGREPORT='[email protected]' PACKAGE_URL='' @@ -1383,7 +1383,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -'configure' configures memcached 1.6.42 to adapt to many kinds of systems. +'configure' configures memcached 1.6.44 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1454,7 +1454,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of memcached 1.6.42:";; + short | recursive ) echo "Configuration of memcached 1.6.44:";; esac cat <<\_ACEOF @@ -1579,7 +1579,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -memcached configure 1.6.42 +memcached configure 1.6.44 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. @@ -2194,7 +2194,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by memcached $as_me 1.6.42, which was +It was created by memcached $as_me 1.6.44, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw @@ -3745,7 +3745,7 @@ # Define the identity of the package. PACKAGE='memcached' - VERSION='1.6.42' + VERSION='1.6.44' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -9429,7 +9429,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by memcached $as_me 1.6.42, which was +This file was extended by memcached $as_me 1.6.44, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -9497,7 +9497,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -memcached config.status 1.6.42 +memcached config.status 1.6.44 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.42/crawler.c new/memcached-1.6.44/crawler.c --- old/memcached-1.6.42/crawler.c 2026-03-05 00:05:05.000000000 +0100 +++ new/memcached-1.6.44/crawler.c 2026-07-07 06:16:48.000000000 +0200 @@ -263,6 +263,10 @@ static int crawler_metadump_init(crawler_module_t *cm, void *data) { cm->status = 0; + if (cm->c.buf != NULL) { + memcpy(cm->c.buf, "OK\r\n", 4); + cm->c.bufused += 4; + } return 0; } @@ -390,6 +394,10 @@ static int crawler_mgdump_init(crawler_module_t *cm, void *data) { cm->status = 0; + if (cm->c.buf != NULL) { + memcpy(cm->c.buf, "OK\r\n", 4); + cm->c.bufused += 4; + } return 0; } @@ -450,6 +458,10 @@ if (c->c == NULL) return -1; if (data_size == 0) return 0; + // a long backstop so clients can't hang forever. + // continually timed out stuff used to blow up memory and crash so this is + // just to avoid replacing one problem with another. + int tries = 1800; while (sent < data_size) { int ret = poll(to_poll, 1, 1000); @@ -460,7 +472,14 @@ return -1; } - if (ret == 0) return 0; + // Timed out, retry for a while. + if (ret == 0) { + if (--tries == 0) { + lru_crawler_close_client(c); + return -1; + } + continue; + } // check if socket was closed on us. if (to_poll[0].revents & POLLIN) { @@ -487,8 +506,9 @@ } else if (total == 0) { lru_crawler_close_client(c); return -1; + } else { + sent += total; } - sent += total; } } // while @@ -620,11 +640,15 @@ if (c->buflen - c->bufused < LRU_CRAWLER_MINBUFSPACE) { int ret = lru_crawler_write(c); if (ret != 0) { + // Must be locked to unlink crawler. + pthread_mutex_lock(&lru_locks[i]); lru_crawler_class_done(i); continue; } } } else if (active_crawler_mod.mod->needs_client) { + // Must be locked to unlink crawler. + pthread_mutex_lock(&lru_locks[i]); lru_crawler_class_done(i); continue; } @@ -862,9 +886,7 @@ assert(crawler_mod_regs[type] != NULL); active_crawler_mod.mod = crawler_mod_regs[type]; active_crawler_type = type; - if (active_crawler_mod.mod->init != NULL) { - active_crawler_mod.mod->init(&active_crawler_mod, data); - } + /* set client, then call init to be able to send OK */ if (active_crawler_mod.mod->needs_client) { if (c == NULL || sfd == 0) { pthread_mutex_unlock(&lru_crawler_lock); @@ -875,6 +897,9 @@ return -2; } } + if (active_crawler_mod.mod->init != NULL) { + active_crawler_mod.mod->init(&active_crawler_mod, data); + } } if (ids == NULL) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.42/doc/Makefile new/memcached-1.6.44/doc/Makefile --- old/memcached-1.6.42/doc/Makefile 2026-05-19 00:14:13.000000000 +0200 +++ new/memcached-1.6.44/doc/Makefile 2026-07-07 06:24:07.000000000 +0200 @@ -194,10 +194,10 @@ PACKAGE = memcached PACKAGE_BUGREPORT = [email protected] PACKAGE_NAME = memcached -PACKAGE_STRING = memcached 1.6.42 +PACKAGE_STRING = memcached 1.6.44 PACKAGE_TARNAME = memcached PACKAGE_URL = -PACKAGE_VERSION = 1.6.42 +PACKAGE_VERSION = 1.6.44 PATH_SEPARATOR = : PKG_CONFIG = /usr/bin/pkg-config PKG_CONFIG_LIBDIR = @@ -208,7 +208,7 @@ SET_MAKE = SHELL = /bin/bash STRIP = -VERSION = 1.6.42 +VERSION = 1.6.44 XML2RFC = no XSLTPROC = no abs_builddir = /home/dormando/p/code/memcached/doc diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.42/items.c new/memcached-1.6.44/items.c --- old/memcached-1.6.42/items.c 2026-03-05 00:05:05.000000000 +0100 +++ new/memcached-1.6.44/items.c 2026-07-03 02:30:18.000000000 +0200 @@ -1084,6 +1084,7 @@ void *hold_lock = NULL; unsigned int move_to_lru = 0; uint64_t limit = 0; + bool do_slab_reassign = false; id |= cur_lru; pthread_mutex_lock(&lru_locks[id]); @@ -1205,7 +1206,7 @@ do_item_unlink_nolock(search, hv); removed++; if (settings.slab_automove == 2) { - slabs_reassign(settings.slab_rebal, -1, orig_id, SLABS_REASSIGN_ALLOW_EVICTIONS); + do_slab_reassign = true; } } else if (flags & LRU_PULL_RETURN_ITEM) { /* Keep a reference to this item and return it. */ @@ -1242,6 +1243,10 @@ } } + if (do_slab_reassign) { + slabs_reassign(settings.slab_rebal, -1, orig_id, SLABS_REASSIGN_ALLOW_EVICTIONS); + } + return removed; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.42/linux_priv.c new/memcached-1.6.44/linux_priv.c --- old/memcached-1.6.42/linux_priv.c 2024-10-31 21:47:40.000000000 +0100 +++ new/memcached-1.6.44/linux_priv.c 2026-07-03 02:30:18.000000000 +0200 @@ -143,6 +143,7 @@ rc |= seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(epoll_pwait), 0); rc |= seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(epoll_ctl), 0); rc |= seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(poll), 0); + rc |= seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(ppoll), 0); rc |= seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(read), 0); rc |= seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(readv), 0); rc |= seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mprotect), 0); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.42/logger.h new/memcached-1.6.44/logger.h --- old/memcached-1.6.42/logger.h 2026-03-05 00:05:05.000000000 +0100 +++ new/memcached-1.6.44/logger.h 2026-07-03 02:30:18.000000000 +0200 @@ -164,6 +164,9 @@ struct timeval tv; /* not monotonic! */ int size; union { +#ifdef NEED_ALIGN + uint64_t align; +#endif char end; } data[]; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.42/memcached.c new/memcached-1.6.44/memcached.c --- old/memcached-1.6.42/memcached.c 2026-05-18 23:43:09.000000000 +0200 +++ new/memcached-1.6.44/memcached.c 2026-07-07 05:19:47.000000000 +0200 @@ -3701,9 +3701,19 @@ if (strncmp(st, "ascii", len) == 0) { bproto = ascii_prot; } else if (strncmp(st, "binary", len) == 0) { + if (settings.auth_file) { + fprintf(stderr, "Cannot use binary protocol when ascii authentication enabled\n"); + free(list); + return 1; + } bproto = binary_prot; } else if (strncmp(st, "negotiating", len) == 0) { - bproto = negotiating_prot; + if (settings.auth_file) { + fprintf(stderr, "WARNING: negotiating ports are ascii only when ascii authentication enabled\n"); + bproto = ascii_prot; + } else { + bproto = negotiating_prot; + } } else if (strncmp(st, "proxy", len) == 0) { #ifdef PROXY if (settings.proxy_enabled) { @@ -4071,7 +4081,12 @@ " forcefully killing LRU tail item.\n" " disabled by default; very dangerous option.\n" " - hash_algorithm: the hash table algorithm\n" - " default is murmur3 hash. options: jenkins, murmur3, xxh3\n" +#ifdef NEED_ALIGN + " default is xxh3 hash on NEED_ALIGN builds.\n" +#else + " default is murmur3 hash.\n" +#endif + " options: jenkins, murmur3, xxh3\n" " - no_lru_crawler: disable LRU Crawler background thread.\n" " - lru_crawler_sleep: microseconds to sleep between items\n" " default is %d.\n" @@ -4712,7 +4727,11 @@ bool start_lru_maintainer = true; bool start_lru_crawler = true; bool start_assoc_maint = true; +#ifdef NEED_ALIGN + enum hashfunc_type hash_type = XXH3_HASH; +#else enum hashfunc_type hash_type = MURMUR3_HASH; +#endif uint32_t tocrawl; uint32_t slab_sizes[MAX_NUMBER_OF_SLAB_CLASSES]; bool use_slab_sizes = false; @@ -4867,7 +4886,11 @@ /* init settings */ settings_init(); +#ifdef NEED_ALIGN + verify_default("hash_algorithm", hash_type == XXH3_HASH); +#else verify_default("hash_algorithm", hash_type == MURMUR3_HASH); +#endif void *storage = NULL; #ifdef EXTSTORE void *storage_cf = storage_init_config(&settings); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.42/memcached.h new/memcached-1.6.44/memcached.h --- old/memcached-1.6.42/memcached.h 2026-05-18 23:43:09.000000000 +0200 +++ new/memcached-1.6.44/memcached.h 2026-07-07 05:19:43.000000000 +0200 @@ -20,6 +20,9 @@ #include <assert.h> #include <grp.h> #include <signal.h> +#ifdef NEED_ALIGN +#include <string.h> +#endif /* need this to get IOV_MAX on some platforms. */ #ifndef __need_IOV_MAX #define __need_IOV_MAX @@ -169,6 +172,18 @@ #define APPEND_NUM_STAT(num, name, fmt, val) \ APPEND_NUM_FMT_STAT("%d:%s", num, name, fmt, val) +#ifdef NEED_ALIGN +/** Item client flag conversion */ +#define FLAGS_CONV(it, flag) { \ + if ((it)->it_flags & ITEM_CFLAGS) { \ + client_flags_t _flags_conv; \ + memcpy(&_flags_conv, ITEM_suffix((it)), sizeof(_flags_conv)); \ + flag = _flags_conv; \ + } else { \ + flag = 0; \ + } \ +} +#else /** Item client flag conversion */ #define FLAGS_CONV(it, flag) { \ if ((it)->it_flags & ITEM_CFLAGS) { \ @@ -177,6 +192,7 @@ flag = 0; \ } \ } +#endif #define FLAGS_SIZE(item) (((item)->it_flags & ITEM_CFLAGS) ? sizeof(client_flags_t) : 0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.42/memcached.spec new/memcached-1.6.44/memcached.spec --- old/memcached-1.6.42/memcached.spec 2026-05-19 00:14:09.000000000 +0200 +++ new/memcached-1.6.44/memcached.spec 2026-07-07 06:24:04.000000000 +0200 @@ -27,7 +27,7 @@ %endif Name: memcached -Version: 1.6.42 +Version: 1.6.44 Release: 1%{?dist} Summary: High Performance, Distributed Memory Object Cache diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.42/proto_bin.c new/memcached-1.6.44/proto_bin.c --- old/memcached-1.6.42/proto_bin.c 2026-05-19 00:12:18.000000000 +0200 +++ new/memcached-1.6.44/proto_bin.c 2026-07-07 06:16:48.000000000 +0200 @@ -466,6 +466,7 @@ c->cmd == PROTOCOL_BINARY_CMD_GATK); int should_return_value = (c->cmd != PROTOCOL_BINARY_CMD_TOUCH); bool failed = false; + bool overflow = false; if (settings.verbose > 1) { fprintf(stderr, "<%d %s ", c->sfd, should_touch ? "TOUCH" : "GET"); @@ -477,9 +478,9 @@ protocol_binary_request_touch *t = (void *)extbuf; time_t exptime = ntohl(t->message.body.expiration); - it = item_touch(key, nkey, realtime(exptime), c->thread); + it = limited_get(key, nkey, c->thread, realtime(exptime), true, DO_UPDATE, &overflow); } else { - it = item_get(key, nkey, c->thread, DO_UPDATE); + it = limited_get(key, nkey, c->thread, 0, false, DO_UPDATE, &overflow); } if (it) { @@ -632,6 +633,10 @@ process_stat_settings(&append_stats, c); } else if (strncmp(subcommand, "detail", 6) == 0) { char *subcmd_pos = subcommand + 6; + if (!settings.dump_enabled) { + write_bin_error(c, PROTOCOL_BINARY_RESPONSE_KEY_ENOENT, NULL, 0); + return; + } if (strncmp(subcmd_pos, " dump", 5) == 0) { int len; char *dump_buf = stats_prefix_dump(&len); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.42/proto_parser.c new/memcached-1.6.44/proto_parser.c --- old/memcached-1.6.42/proto_parser.c 2026-03-05 00:05:05.000000000 +0100 +++ new/memcached-1.6.44/proto_parser.c 2026-07-03 02:30:18.000000000 +0200 @@ -636,7 +636,9 @@ *p = '0'; p++; } else { - p = itoa_u64(*((client_flags_t *) ITEM_suffix(it)), p); + client_flags_t flags; + FLAGS_CONV(it, flags); + p = itoa_u64(flags, p); } *p = ' '; p = itoa_u32(nbytes-2, p+1); @@ -1108,7 +1110,9 @@ *p = '0'; p++; } else { - p = itoa_u64(*((client_flags_t *) ITEM_suffix(it)), p); + client_flags_t flags; + FLAGS_CONV(it, flags); + p = itoa_u64(flags, p); } break; case 'l': diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.42/proto_text.c new/memcached-1.6.44/proto_text.c --- old/memcached-1.6.42/proto_text.c 2026-05-19 00:12:18.000000000 +0200 +++ new/memcached-1.6.44/proto_text.c 2026-07-07 06:16:48.000000000 +0200 @@ -223,6 +223,7 @@ #define SUBCOMMAND_TOKEN 1 #define KEY_TOKEN 1 #define MAX_AUTH_REQ_LEN 16384 +#define MIN_AUTH_REQ_LEN 6 int try_read_command_asciiauth(conn *c) { mcmc_tokenizer_t tok; @@ -251,6 +252,12 @@ return 0; } + if (el - st < MIN_AUTH_REQ_LEN) { + // Can't possibly be shorter than this. Parser dislikes getting + // strings < 2 in len. + conn_set_state(c, conn_closing); + return 1; + } // Looking for: "set foo 0 0 N\r\nuser pass\r\n" // key, flags, and ttl are ignored. N is used to see if we have the rest. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.42/proxy_network.c new/memcached-1.6.44/proxy_network.c --- old/memcached-1.6.42/proxy_network.c 2026-05-18 23:43:09.000000000 +0200 +++ new/memcached-1.6.44/proxy_network.c 2026-07-07 06:16:48.000000000 +0200 @@ -568,6 +568,16 @@ // r->resp.reslen + r->resp.vlen is the total length of the response. // TODO (v2): need to associate a buffer with this response... // for now we simply malloc, but reusable buffers should be used + if (r->resp.vlen > INT32_MAX/2) { + // In a real memcached the value can't be over 1G. I made a + // huge mess out of the various places blen gets used, so + // instead of trying to fix all those paths without breaking + // something else, we can instead clamp the value length. + flags = P_BE_FAIL_OOM; + r->blen = 0; + stop = true; + break; + } r->blen = r->resp.reslen + r->resp.vlen; r->buf = malloc(r->blen + extra_space); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.42/t/ascii-auth.t new/memcached-1.6.44/t/ascii-auth.t --- old/memcached-1.6.42/t/ascii-auth.t 2026-05-19 00:12:18.000000000 +0200 +++ new/memcached-1.6.44/t/ascii-auth.t 2026-07-07 06:16:48.000000000 +0200 @@ -22,7 +22,7 @@ like(scalar <$sock>, qr/CLIENT_ERROR/, "failed to authenticate"); # Super long tokens are invalid. -print $sock "set foo 0 0 2147483646\r\nasfd\r\n"; +print $sock "set foo 0 0 2147483646\r\n"; like(scalar <$sock>, qr/CLIENT_ERROR/, "failed to authenticate"); # Try for real. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.42/t/lru-crawler.t new/memcached-1.6.44/t/lru-crawler.t --- old/memcached-1.6.42/t/lru-crawler.t 2024-08-01 20:54:00.000000000 +0200 +++ new/memcached-1.6.44/t/lru-crawler.t 2026-07-03 02:30:18.000000000 +0200 @@ -2,7 +2,7 @@ use strict; use warnings; -use Test::More tests => 70257; +use Test::More tests => 70259; use FindBin qw($Bin); use lib "$Bin/lib"; use MemcachedTest; @@ -71,6 +71,7 @@ # Check that crawler metadump works correctly. { print $sock "lru_crawler metadump all\r\n"; + is(scalar <$sock>, "OK\r\n"); my $count = 0; while (<$sock>) { last if /^(\.|END)/; @@ -110,6 +111,7 @@ # Check metadump hash table walk returns correct number of items. { print $sock "lru_crawler metadump hash\r\n"; + is(scalar <$sock>, "OK\r\n"); my $count = 0; while (<$sock>) { last if /^(\.|END)/; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.42/t/proxyunits.t new/memcached-1.6.44/t/proxyunits.t --- old/memcached-1.6.42/t/proxyunits.t 2026-03-05 00:05:05.000000000 +0100 +++ new/memcached-1.6.44/t/proxyunits.t 2026-07-03 02:30:18.000000000 +0200 @@ -159,6 +159,20 @@ } { + note("Testing extreme backend response"); + my $be = $mbe[0]; + print $ps "get /b/e\r\n"; + is(scalar <$be>, "get /b/e\r\n", "get passthrough"); + # Set impossible value + my $data = 'x' x 16000; + print $be "VALUE /b/c 0 4294967293\r\n$data\r\nEND\r\n"; + + is(scalar <$ps>, "SERVER_ERROR backend failure\r\n", "backend breaks"); + # Accept new backend + $mbe[0] = accept_backend($mocksrvs[0]); +} + +{ note("Test dead backend"); my $start = int(time()); print $ps "get /dead/foo\r\n"; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.42/t/slabs-mover.t new/memcached-1.6.44/t/slabs-mover.t --- old/memcached-1.6.42/t/slabs-mover.t 2026-03-05 00:05:05.000000000 +0100 +++ new/memcached-1.6.44/t/slabs-mover.t 2026-07-03 02:30:18.000000000 +0200 @@ -40,6 +40,7 @@ last if ($stats_a->{$stat} == $amt); sleep $to_sleep; $to_sleep += $cnt / 100; + $to_sleep = 0.2 if $to_sleep > 0.2; #print STDERR "SLEEPING: $to_sleep STAT: ", $stats_a->{$stat}, " LAST BUSY: ", $stats_a->{slab_reassign_last_busy_status}, "\n"; } return $stats_a; @@ -57,6 +58,7 @@ last if ($stats_a->{$stat} > $stats->{$stat}+$amt); sleep $to_sleep; $to_sleep += $cnt / 100; + $to_sleep = 0.2 if $to_sleep > 0.2; #print STDERR "SLEEPING: $to_sleep STAT: ", $stats_a->{$stat}, " LAST BUSY: ", $stats_a->{slab_reassign_last_busy_status}, "\n"; #print STDERR Dumper(map { $_ => $stats_a->{$_} } sort keys %$stats_a), "\n"; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.42/vendor/mcmc/mcmc.c new/memcached-1.6.44/vendor/mcmc/mcmc.c --- old/memcached-1.6.42/vendor/mcmc/mcmc.c 2026-05-18 23:43:09.000000000 +0200 +++ new/memcached-1.6.44/vendor/mcmc/mcmc.c 2026-07-03 02:30:18.000000000 +0200 @@ -193,7 +193,7 @@ errno = 0; uint32_t bytes = strtoul(p, &n, 10); - if ((errno == ERANGE) || (p == n)) { + if ((errno == ERANGE) || (p == n) || (bytes >= UINT32_MAX-2)) { return -MCMC_ERR_VALUE; } p = n; @@ -350,7 +350,7 @@ errno = 0; char *n = NULL; uint32_t vsize = strtoul(cur, &n, 10); - if ((errno == ERANGE) || (cur == n)) { + if ((errno == ERANGE) || (cur == n) || (vsize >= UINT32_MAX-2)) { r->type = MCMC_RESP_FAIL; code = -MCMC_ERR_PARSE; } else { @@ -635,6 +635,8 @@ } } +// In these cases where we are converting tokens to numerics we want to +// exclude the command and the key; index 1 is the first valid. #define X(n, p, c) \ int n(const char *l, mcmc_tokenizer_t *t, int idx, p *val) { \ if (idx > 0 && idx < t->ntokens) { \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memcached-1.6.42/version.m4 new/memcached-1.6.44/version.m4 --- old/memcached-1.6.42/version.m4 2026-05-19 00:14:09.000000000 +0200 +++ new/memcached-1.6.44/version.m4 2026-07-07 06:24:04.000000000 +0200 @@ -1 +1 @@ -m4_define([VERSION_NUMBER], [1.6.42]) +m4_define([VERSION_NUMBER], [1.6.44])
