Commit 9c7e43b3821 for php

commit 9c7e43b3821fa38e46f8eb50df65b7ccb0953da3
Author: Lazizbek Ergashev <lazerg2@gmail.com>
Date:   Tue Oct 27 19:28:59 2026 +0500

    Fix GH-24736: php_odbc_connstr_is_quoted() accepts missing closing brace (#24737)

    * Fix GH-24736: php_odbc_connstr_is_quoted() accepts missing closing brace

    * Update comment for closing brace check

diff --git a/NEWS b/NEWS
index 464c723e6aa..6f447b572e2 100644
--- a/NEWS
+++ b/NEWS
@@ -92,6 +92,10 @@ PHP                                                                        NEWS
   . Fixed bug GH-24293 (Segfault on connect with an empty password to a
     MariaDB PAM account). (lazerg)

+- ODBC:
+  . Fixed bug GH-24736 (php_odbc_connstr_is_quoted() treats a value with no
+    closing brace as quoted). (lazerg)
+
 - Opcache:
   . Fixed tracing JIT returning a wrapped integer instead of a float on
     integer overflow after an integer was compared with a float or
diff --git a/ext/odbc/tests/gh24736.phpt b/ext/odbc/tests/gh24736.phpt
new file mode 100644
index 00000000000..a96fedeb394
--- /dev/null
+++ b/ext/odbc/tests/gh24736.phpt
@@ -0,0 +1,20 @@
+--TEST--
+GH-24736 (Connection string value without closing brace treated as quoted)
+--EXTENSIONS--
+odbc
+--FILE--
+<?php
+var_dump(odbc_connection_string_is_quoted("{;Trusted_Connection=yes;UID=x"));
+var_dump(odbc_connection_string_is_quoted("{"));
+var_dump(odbc_connection_string_is_quoted("{foo}}"));
+var_dump(odbc_connection_string_is_quoted("{foo}"));
+var_dump(odbc_connection_string_is_quoted("{foo}}}"));
+var_dump(odbc_connection_string_is_quoted("{}"));
+?>
+--EXPECT--
+bool(false)
+bool(false)
+bool(false)
+bool(true)
+bool(true)
+bool(true)
diff --git a/main/php_odbc_utils.c b/main/php_odbc_utils.c
index 162a1eb31df..7a9ce1c00ad 100644
--- a/main/php_odbc_utils.c
+++ b/main/php_odbc_utils.c
@@ -48,12 +48,13 @@ PHPAPI bool php_odbc_connstr_is_quoted(const char *str)
 		if (str[i] == '}' && str[i + 1] == '}') {
 			/* Skip over so we don't count it again */
 			i++;
-		} else if (str[i] == '}' && str[i + 1] != '\0') {
-			/* If not at the end, not quoted */
-			return false;
+		} else if (str[i] == '}') {
+			/* Only quoted if at the end */
+			return str[i + 1] == '\0';
 		}
 	}
-	return true;
+	/* No closing brace */
+	return false;
 }

 /**