You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by pe...@apache.org on 2025/04/22 14:00:11 UTC

(celix) branch hotfix/query-cmd-fix created (now 02ddb5cb7)

This is an automated email from the ASF dual-hosted git repository.

pengzheng pushed a change to branch hotfix/query-cmd-fix
in repository https://gitbox.apache.org/repos/asf/celix.git


      at 02ddb5cb7 Fix the "query" command to properly validate bundle ID input.

This branch includes the following new commits:

     new 02ddb5cb7 Fix the "query" command to properly validate bundle ID input.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(celix) 01/01: Fix the "query" command to properly validate bundle ID input.

Posted by pe...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

pengzheng pushed a commit to branch hotfix/query-cmd-fix
in repository https://gitbox.apache.org/repos/asf/celix.git

commit 02ddb5cb72833477d3553a7db9e2d89eb00218ee
Author: PengZheng <ho...@gmail.com>
AuthorDate: Tue Apr 22 21:59:57 2025 +0800

    Fix the "query" command to properly validate bundle ID input.
    
    Previously, query filtering with a service name or LDAP filter is broken.
---
 bundles/shell/shell/gtest/src/ShellTestSuite.cc | 23 ++++++++++++++++++++++-
 bundles/shell/shell/src/query_command.c         |  3 ++-
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/bundles/shell/shell/gtest/src/ShellTestSuite.cc b/bundles/shell/shell/gtest/src/ShellTestSuite.cc
index b7b5f791e..b361db02e 100644
--- a/bundles/shell/shell/gtest/src/ShellTestSuite.cc
+++ b/bundles/shell/shell/gtest/src/ShellTestSuite.cc
@@ -41,6 +41,7 @@ public:
         auto properties = celix_properties_create();
         celix_properties_set(properties, "LOGHELPER_ENABLE_STDOUT_FALLBACK", "true");
         celix_properties_set(properties, CELIX_FRAMEWORK_CACHE_DIR, ".cacheShellTestSuite");
+        celix_properties_setBool(properties, CELIX_FRAMEWORK_CLEAN_CACHE_DIR_ON_CREATE, true);
         celix_properties_set(properties, "CELIX_LOGGING_DEFAULT_ACTIVE_LOG_LEVEL", "trace");
 
         //to ensure "query 0" is still a test case for am empty result.
@@ -202,6 +203,16 @@ TEST_F(ShellTestSuite, queryTest) {
             EXPECT_TRUE(found != nullptr);
             free(buf);
         }
+        {
+            char *buf = nullptr;
+            size_t len;
+            FILE *sout = open_memstream(&buf, &len);
+            command->executeCommand(command->handle, "query 1", sout, sout);
+            fclose(sout);
+            char* found = strstr(buf, "Provided services found 1"); //note could be 11, 12, etc
+            EXPECT_TRUE(found != nullptr);
+            free(buf);
+        }
         {
             char *buf = nullptr;
             size_t len;
@@ -209,7 +220,17 @@ TEST_F(ShellTestSuite, queryTest) {
             auto cmd = std::string{"query "} + std::to_string(d->resourceBundleId);
             command->executeCommand(command->handle, cmd.c_str(), sout, sout); //note query test resource bundle -> no results
             fclose(sout);
-            char* found = strstr(buf, "No results"); //note could be 11, 12, etc
+            char* found = strstr(buf, "No results");
+            EXPECT_TRUE(found != nullptr);
+            free(buf);
+        }
+        {
+            char *buf = nullptr;
+            size_t len;
+            FILE *sout = open_memstream(&buf, &len);
+            command->executeCommand(command->handle, "query celix_shell_command", sout, sout); //note query test resource bundle -> no results
+            fclose(sout);
+            char* found = strstr(buf, "Provided services found 1"); //note could be 11, 12, etc
             EXPECT_TRUE(found != nullptr);
             free(buf);
         }
diff --git a/bundles/shell/shell/src/query_command.c b/bundles/shell/shell/src/query_command.c
index 49eb73444..4bc65033a 100644
--- a/bundles/shell/shell/src/query_command.c
+++ b/bundles/shell/shell/src/query_command.c
@@ -17,6 +17,7 @@
  *under the License.
  */
 
+#include <ctype.h>
 #include <string.h>
 #include <stdlib.h>
 
@@ -201,7 +202,7 @@ bool queryCommand_execute(void *_ptr, const char *command_line_str, FILE *sout,
             //check if its a number (bundle id)
             errno = 0;
             long bndId = strtol(sub_str, NULL, 10);
-            if (bndId >= CELIX_FRAMEWORK_BUNDLE_ID && errno == 0 /*not EINVAL*/) {
+            if (bndId >= CELIX_FRAMEWORK_BUNDLE_ID && isdigit(sub_str[0]) && errno == 0 /*not EINVAL*/) {
                 opts.bndId = bndId;
             } else {
                 //not option and not a bundle id -> query