Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package ulfius for openSUSE:Factory checked 
in at 2021-11-09 23:55:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ulfius (Old)
 and      /work/SRC/openSUSE:Factory/.ulfius.new.1890 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ulfius"

Tue Nov  9 23:55:07 2021 rev:23 rq:930500 version:2.7.6

Changes:
--------
--- /work/SRC/openSUSE:Factory/ulfius/ulfius.changes    2021-11-02 
19:19:45.351111174 +0100
+++ /work/SRC/openSUSE:Factory/.ulfius.new.1890/ulfius.changes  2021-11-09 
23:55:34.107981915 +0100
@@ -1,0 +2,7 @@
+Fri Nov  5 17:54:03 UTC 2021 - Martin Hauke <[email protected]>
+
+- Update to version 2.7.6
+  * Fix ulfius_websocket_wait_close
+  * Fix ulfius_send_http_request when url contains spaces
+
+-------------------------------------------------------------------

Old:
----
  ulfius-2.7.5.tar.gz

New:
----
  ulfius-2.7.6.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ulfius.spec ++++++
--- /var/tmp/diff_new_pack.Pcq7HG/_old  2021-11-09 23:55:34.575982154 +0100
+++ /var/tmp/diff_new_pack.Pcq7HG/_new  2021-11-09 23:55:34.575982154 +0100
@@ -20,7 +20,7 @@
 %define _lto_cflags %{nil}
 %define sover 2_7
 Name:           ulfius
-Version:        2.7.5
+Version:        2.7.6
 Release:        0
 Summary:        Web Framework for REST Applications in C
 License:        MIT

++++++ ulfius-2.7.5.tar.gz -> ulfius-2.7.6.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ulfius-2.7.5/CHANGELOG.md 
new/ulfius-2.7.6/CHANGELOG.md
--- old/ulfius-2.7.5/CHANGELOG.md       2021-10-26 23:17:22.000000000 +0200
+++ new/ulfius-2.7.6/CHANGELOG.md       2021-11-05 14:17:31.000000000 +0100
@@ -1,5 +1,10 @@
 # Ulfius Changelog
 
+## 2.7.6
+
+- Fix `ulfius_websocket_wait_close`
+- Fix `ulfius_send_http_request` when url contains spaces
+
 ## 2.7.5
 
 - Fix cookie management in `ulfius_send_http_request` and 
`ulfius_send_http_streaming_request`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ulfius-2.7.5/CMakeLists.txt 
new/ulfius-2.7.6/CMakeLists.txt
--- old/ulfius-2.7.5/CMakeLists.txt     2021-10-26 23:17:22.000000000 +0200
+++ new/ulfius-2.7.6/CMakeLists.txt     2021-11-05 14:17:31.000000000 +0100
@@ -30,7 +30,7 @@
 set(PROJECT_BUGREPORT_PATH "https://github.com/babelouest/ulfius/issues";)
 set(LIBRARY_VERSION_MAJOR "2")
 set(LIBRARY_VERSION_MINOR "7")
-set(LIBRARY_VERSION_PATCH "5")
+set(LIBRARY_VERSION_PATCH "6")
 
 set(PROJECT_VERSION 
"${LIBRARY_VERSION_MAJOR}.${LIBRARY_VERSION_MINOR}.${LIBRARY_VERSION_PATCH}")
 set(PROJECT_VERSION_MAJOR ${LIBRARY_VERSION_MAJOR})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ulfius-2.7.5/src/Makefile 
new/ulfius-2.7.6/src/Makefile
--- old/ulfius-2.7.5/src/Makefile       2021-10-26 23:17:22.000000000 +0200
+++ new/ulfius-2.7.6/src/Makefile       2021-11-05 14:17:31.000000000 +0100
@@ -43,7 +43,7 @@
 OUTPUT=libulfius.so
 VERSION_MAJOR=2
 VERSION_MINOR=7
-VERSION_PATCH=5
+VERSION_PATCH=6
 
 ifndef JANSSONFLAG
 DISABLE_JANSSON=0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ulfius-2.7.5/src/u_send_request.c 
new/ulfius-2.7.6/src/u_send_request.c
--- old/ulfius-2.7.5/src/u_send_request.c       2021-10-26 23:17:22.000000000 
+0200
+++ new/ulfius-2.7.6/src/u_send_request.c       2021-11-05 14:17:31.000000000 
+0100
@@ -195,7 +195,7 @@
   CURLcode res;
   CURL * curl_handle = NULL;
   struct curl_slist * header_list = NULL, * cookies_list = NULL;
-  char * key_esc = NULL, * value_esc = NULL, * cookie = NULL, * cookies = 
NULL, * header = NULL, * fp = "?", * np = "&";
+  char * key_esc = NULL, * value_esc = NULL, * cookie = NULL, * cookies = 
NULL, * header = NULL, * fp = "?", * np = "&", * url = NULL;
   const char * value = NULL, ** keys = NULL;
   int i, has_params = 0, ret, exit_loop;
   struct _u_request * copy_request = NULL;
@@ -300,7 +300,8 @@
           }
 #endif
 
-          has_params = (o_strchr(copy_request->http_url, '?') != NULL);
+          url = str_replace(copy_request->http_url, " ", "%20");
+          has_params = (o_strchr(url, '?') != NULL);
           if (u_map_count(copy_request->map_url) > 0) {
             // Append url parameters
             keys = u_map_enum_keys(copy_request->map_url);
@@ -315,10 +316,10 @@
                   value_esc = curl_easy_escape(curl_handle, value, 0);
                   if (value_esc != NULL) {
                     if (!has_params) {
-                      copy_request->http_url = 
mstrcatf(copy_request->http_url, "%s%s=%s", fp, key_esc, value_esc);
+                      url = mstrcatf(url, "%s%s=%s", fp, key_esc, value_esc);
                       has_params = 1;
                     } else {
-                      copy_request->http_url = 
mstrcatf(copy_request->http_url, "%s%s=%s", np, key_esc, value_esc);
+                      url = mstrcatf(url, "%s%s=%s", np, key_esc, value_esc);
                     }
                     curl_free(value_esc);
                   } else {
@@ -327,10 +328,10 @@
                   }
                 } else {
                   if (!has_params) {
-                    copy_request->http_url = mstrcatf(copy_request->http_url, 
"%s%s", fp, key_esc);
+                    url = mstrcatf(url, "%s%s", fp, key_esc);
                     has_params = 1;
                   } else {
-                    copy_request->http_url = mstrcatf(copy_request->http_url, 
"%s%s", np, key_esc);
+                    url = mstrcatf(url, "%s%s", np, key_esc);
                   }
                 }
                 curl_free(key_esc);
@@ -481,7 +482,7 @@
           }
 
           // Request parameters
-          if (curl_easy_setopt(curl_handle, CURLOPT_URL, 
copy_request->http_url) != CURLE_OK ||
+          if (curl_easy_setopt(curl_handle, CURLOPT_URL, url) != CURLE_OK ||
               curl_easy_setopt(curl_handle, CURLOPT_CUSTOMREQUEST, 
copy_request->http_verb!=NULL?copy_request->http_verb:"GET") != CURLE_OK ||
               curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, header_list) 
!= CURLE_OK) {
             y_log_message(Y_LOG_LEVEL_ERROR, "Ulfius - Error setting libcurl 
options (1)");
@@ -666,6 +667,7 @@
             curl_slist_free_all(cookies_list);
           }
         } while (0);
+        o_free(url);
       } else {
         y_log_message(Y_LOG_LEVEL_ERROR, "Ulfius - Error curl_easy_init");
         ret = U_ERROR_LIBCURL;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ulfius-2.7.5/src/u_websocket.c 
new/ulfius-2.7.6/src/u_websocket.c
--- old/ulfius-2.7.5/src/u_websocket.c  2021-10-26 23:17:22.000000000 +0200
+++ new/ulfius-2.7.6/src/u_websocket.c  2021-11-05 14:17:31.000000000 +0100
@@ -2234,8 +2234,12 @@
     if (websocket_manager->connected) {
       if (timeout) {
         clock_gettime(CLOCK_REALTIME, &abstime);
-        abstime.tv_nsec += ((timeout%1000) * 1000000);
         abstime.tv_sec += (timeout / 1000);
+        abstime.tv_nsec += ((timeout%1000) * 1000000);
+        if (abstime.tv_nsec > 999999999) {
+          abstime.tv_nsec %= 1000000000;
+          abstime.tv_sec ++;
+        }
         pthread_mutex_lock(&websocket_manager->status_lock);
         ret = pthread_cond_timedwait(&websocket_manager->status_cond, 
&websocket_manager->status_lock, &abstime);
         pthread_mutex_unlock(&websocket_manager->status_lock);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ulfius-2.7.5/test/framework.c 
new/ulfius-2.7.6/test/framework.c
--- old/ulfius-2.7.5/test/framework.c   2021-10-26 23:17:22.000000000 +0200
+++ new/ulfius-2.7.6/test/framework.c   2021-11-05 14:17:31.000000000 +0100
@@ -11,6 +11,7 @@
 #include <sys/time.h>
 #include <sys/types.h>
 #include <netinet/tcp.h>
+#include <ifaddrs.h>
 
 #ifndef _WIN32
   #include <sys/socket.h>
@@ -49,6 +50,16 @@
 #define SUBJECT "subject"
 #define BODY "mail body"
 
+#define KEY1 "key1"
+#define KEY2 "k??y2"
+#define KEY3 "key 3"
+#define KEY4 "key%204"
+
+#define VALUE1 "value1"
+#define VALUE2 "value2:'with$%stuff"
+#define VALUE3 "value 3"
+#define VALUE4 "valu??(4)"
+
 struct smtp_manager {
   char * mail_data;
   unsigned int port;
@@ -268,37 +279,22 @@
   return buffer;
 }
 
-/**
- * decode a u_map into a string
- */
-char * print_map(const struct _u_map * map) {
-  char * line, * to_return = NULL;
-  const char **keys, * value;
-  int len, i;
-  if (map != NULL) {
-    keys = u_map_enum_keys(map);
-    for (i=0; keys[i] != NULL; i++) {
-      value = u_map_get(map, keys[i]);
-      len = snprintf(NULL, 0, "key is %s, value is %s", keys[i], value);
-      line = o_malloc((len+1)*sizeof(char));
-      snprintf(line, (len+1), "key is %s, value is %s", keys[i], value);
-      if (to_return != NULL) {
-        len = o_strlen(to_return) + o_strlen(line) + 1;
-        to_return = o_realloc(to_return, (len+1)*sizeof(char));
-        if (o_strlen(to_return) > 0) {
-          strcat(to_return, "\n");
-        }
-      } else {
-        to_return = o_malloc((o_strlen(line) + 1)*sizeof(char));
-        to_return[0] = 0;
+static int has_ipv6() {
+  struct ifaddrs * ifaddr, * ifa;
+  
+  if (getifaddrs(&ifaddr) == -1) {
+    return 0;
+  }
+  for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
+    if (ifa->ifa_addr != NULL) {
+      if (ifa->ifa_addr->sa_family == AF_INET6) {
+        freeifaddrs(ifaddr);
+        return 1;
       }
-      strcat(to_return, line);
-      o_free(line);
     }
-    return to_return;
-  } else {
-    return NULL;
   }
+  freeifaddrs(ifaddr);
+  return 0;
 }
 
 int callback_function_empty(const struct _u_request * request, struct 
_u_response * response, void * user_data) {
@@ -522,6 +518,33 @@
   return U_CALLBACK_CONTINUE;
 }
 
+int callback_send_request_no_rest(const struct _u_request * request, struct 
_u_response * response, void * user_data) {
+  struct _u_request * request_orig = (struct _u_request *)user_data;
+  const char ** keys;
+  size_t i;
+
+  ck_assert_int_eq(u_map_count(request->map_url), 
u_map_count(request_orig->map_url));
+  keys = u_map_enum_keys(request->map_url);
+  for (i=0; keys[i]!=NULL; i++) {
+    if (o_strlen(u_map_get(request->map_url, keys[i]))) {
+      ck_assert_str_eq(u_map_get(request->map_url, keys[i]), 
u_map_get(request_orig->map_url, keys[i]));
+    }
+  }
+  response->status = 208;
+
+  return U_CALLBACK_CONTINUE;
+}
+
+int callback_send_request_rest(const struct _u_request * request, struct 
_u_response * response, void * user_data) {
+  ck_assert_int_eq(u_map_count(request->map_url), 3);
+  ck_assert_str_eq(VALUE1, u_map_get(request->map_url, KEY1));
+  ck_assert_str_eq(VALUE3, u_map_get(request->map_url, KEY2));
+  ck_assert_str_eq(VALUE4, u_map_get(request->map_url, KEY3));
+  response->status = 208;
+
+  return U_CALLBACK_CONTINUE;
+}
+
 int via_free_with_test = 0;
 
 void free_with_test(void * ptr) {
@@ -749,14 +772,16 @@
   ulfius_clean_request(&request);
   ulfius_clean_response(&response);
   
-  ulfius_init_request(&request);
-  request.http_url = o_strdup("http://[::1]:8080/empty";);
-  request.network_type = U_USE_IPV6;
-  ulfius_init_response(&response);
-  ck_assert_int_eq(ulfius_send_http_request(&request, &response), U_OK);
-  ck_assert_int_eq(response.status, 200);
-  ulfius_clean_request(&request);
-  ulfius_clean_response(&response);
+  if (has_ipv6()) {
+    ulfius_init_request(&request);
+    request.http_url = o_strdup("http://[::1]:8080/empty";);
+    request.network_type = U_USE_IPV6;
+    ulfius_init_response(&response);
+    ck_assert_int_eq(ulfius_send_http_request(&request, &response), U_OK);
+    ck_assert_int_eq(response.status, 200);
+    ulfius_clean_request(&request);
+    ulfius_clean_response(&response);
+  }
   
   ulfius_stop_framework(&u_instance);
   ulfius_clean_instance(&u_instance);
@@ -772,14 +797,16 @@
   ck_assert_int_ne(ulfius_send_http_request(&request, NULL), U_OK);
   ulfius_clean_request(&request);
   
-  ulfius_init_request(&request);
-  request.http_url = o_strdup("http://[::1]:8080/empty";);
-  request.network_type = U_USE_IPV6;
-  ulfius_init_response(&response);
-  ck_assert_int_eq(ulfius_send_http_request(&request, &response), U_OK);
-  ck_assert_int_eq(response.status, 200);
-  ulfius_clean_request(&request);
-  ulfius_clean_response(&response);
+  if (has_ipv6()) {
+    ulfius_init_request(&request);
+    request.http_url = o_strdup("http://[::1]:8080/empty";);
+    request.network_type = U_USE_IPV6;
+    ulfius_init_response(&response);
+    ck_assert_int_eq(ulfius_send_http_request(&request, &response), U_OK);
+    ck_assert_int_eq(response.status, 200);
+    ulfius_clean_request(&request);
+    ulfius_clean_response(&response);
+  }
   
   ulfius_stop_framework(&u_instance);
   ulfius_clean_instance(&u_instance);
@@ -798,11 +825,13 @@
   ulfius_clean_request(&request);
   ulfius_clean_response(&response);
   
-  ulfius_init_request(&request);
-  request.http_url = o_strdup("http://[::1]:8080/empty";);
-  request.network_type = U_USE_IPV6;
-  ck_assert_int_ne(ulfius_send_http_request(&request, NULL), U_OK);
-  ulfius_clean_request(&request);
+  if (has_ipv6()) {
+    ulfius_init_request(&request);
+    request.http_url = o_strdup("http://[::1]:8080/empty";);
+    request.network_type = U_USE_IPV6;
+    ck_assert_int_ne(ulfius_send_http_request(&request, NULL), U_OK);
+    ulfius_clean_request(&request);
+  }
   
   ulfius_stop_framework(&u_instance);
   ulfius_clean_instance(&u_instance);
@@ -825,41 +854,45 @@
   ulfius_clean_request(&request);
   ulfius_clean_response(&response);
   
-  ulfius_init_request(&request);
-  request.http_url = o_strdup("http://[::1]:8080/empty";);
-  request.network_type = U_USE_IPV6;
-  ck_assert_int_ne(ulfius_send_http_request(&request, NULL), U_OK);
-  ulfius_clean_request(&request);
+  if (has_ipv6()) {
+    ulfius_init_request(&request);
+    request.http_url = o_strdup("http://[::1]:8080/empty";);
+    request.network_type = U_USE_IPV6;
+    ck_assert_int_ne(ulfius_send_http_request(&request, NULL), U_OK);
+    ulfius_clean_request(&request);
+  }
   
   ulfius_stop_framework(&u_instance);
   ulfius_clean_instance(&u_instance);
   
-  // Test network binding to an IPV6 address
-  memset(&ipv6addr, 0, sizeof(ipv6addr));
-  ipv6addr.sin6_family = AF_INET6;
-  ipv6addr.sin6_port = htons(8080);
-  ipv6addr.sin6_addr = in6addr_loopback;
-  ck_assert_int_eq(ulfius_init_instance_ipv6(&u_instance, 8080, &ipv6addr, 
U_USE_IPV6, NULL), U_OK);
-  ck_assert_int_eq(ulfius_add_endpoint_by_val(&u_instance, "GET", "empty", 
NULL, 0, &callback_function_empty, NULL), U_OK);
-  ck_assert_int_eq(ulfius_start_framework(&u_instance), U_OK);
-
-  ulfius_init_request(&request);
-  request.http_url = o_strdup("http://127.0.0.1:8080/empty";);
-  request.network_type = U_USE_IPV4;
-  ck_assert_int_ne(ulfius_send_http_request(&request, NULL), U_OK);
-  ulfius_clean_request(&request);
-  
-  ulfius_init_request(&request);
-  request.http_url = o_strdup("http://[::1]:8080/empty";);
-  request.network_type = U_USE_IPV6;
-  ulfius_init_response(&response);
-  ck_assert_int_eq(ulfius_send_http_request(&request, &response), U_OK);
-  ck_assert_int_eq(response.status, 200);
-  ulfius_clean_request(&request);
-  ulfius_clean_response(&response);
+  if (has_ipv6()) {
+    // Test network binding to an IPV6 address
+    memset(&ipv6addr, 0, sizeof(ipv6addr));
+    ipv6addr.sin6_family = AF_INET6;
+    ipv6addr.sin6_port = htons(8080);
+    ipv6addr.sin6_addr = in6addr_loopback;
+    ck_assert_int_eq(ulfius_init_instance_ipv6(&u_instance, 8080, &ipv6addr, 
U_USE_IPV6, NULL), U_OK);
+    ck_assert_int_eq(ulfius_add_endpoint_by_val(&u_instance, "GET", "empty", 
NULL, 0, &callback_function_empty, NULL), U_OK);
+    ck_assert_int_eq(ulfius_start_framework(&u_instance), U_OK);
+
+    ulfius_init_request(&request);
+    request.http_url = o_strdup("http://127.0.0.1:8080/empty";);
+    request.network_type = U_USE_IPV4;
+    ck_assert_int_ne(ulfius_send_http_request(&request, NULL), U_OK);
+    ulfius_clean_request(&request);
+  
+    ulfius_init_request(&request);
+    request.http_url = o_strdup("http://[::1]:8080/empty";);
+    request.network_type = U_USE_IPV6;
+    ulfius_init_response(&response);
+    ck_assert_int_eq(ulfius_send_http_request(&request, &response), U_OK);
+    ck_assert_int_eq(response.status, 200);
+    ulfius_clean_request(&request);
+    ulfius_clean_response(&response);
   
-  ulfius_stop_framework(&u_instance);
-  ulfius_clean_instance(&u_instance);
+    ulfius_stop_framework(&u_instance);
+    ulfius_clean_instance(&u_instance);
+  }
 }
 END_TEST
 #endif
@@ -1379,7 +1412,6 @@
 }
 END_TEST
 
-
 START_TEST(test_ulfius_malformed_requests)
 {
   struct _u_instance u_instance;
@@ -1442,6 +1474,44 @@
 }
 END_TEST
 
+START_TEST(test_ulfius_send_http_request)
+{
+  struct _u_instance u_instance;
+  struct _u_request request;
+  struct _u_response response;
+  
+  ck_assert_int_eq(ulfius_init_request(&request), U_OK);
+  ck_assert_int_eq(ulfius_init_instance(&u_instance, 8080, NULL, NULL), U_OK);
+  ck_assert_int_eq(ulfius_add_endpoint_by_val(&u_instance, "GET", "/norest", 
"*", 0, &callback_send_request_no_rest, &request), U_OK);
+  ck_assert_int_eq(ulfius_add_endpoint_by_val(&u_instance, "GET", "/rest", 
"/:"KEY1"/:"KEY2"/:"KEY3"/", 0, &callback_send_request_rest, NULL), U_OK);
+  ck_assert_int_eq(ulfius_start_framework(&u_instance), U_OK);
+
+  ck_assert_int_eq(ulfius_init_response(&response), U_OK);
+  ck_assert_int_eq(ulfius_set_request_properties(&request, U_OPT_HTTP_URL, 
"http://localhost:8080/norest/test_request/give me some space/",
+                                                           
U_OPT_URL_PARAMETER, KEY1, VALUE1,
+                                                           
U_OPT_URL_PARAMETER, KEY2, VALUE2,
+                                                           
U_OPT_URL_PARAMETER, KEY3, VALUE3,
+                                                           
U_OPT_URL_PARAMETER, KEY4, NULL,
+                                                           U_OPT_NONE), U_OK);
+  ck_assert_int_eq(ulfius_send_http_request(&request, &response), U_OK);
+  ck_assert_int_eq(208, response.status);
+  ulfius_clean_request(&request);
+  ulfius_clean_response(&response);
+
+  ck_assert_int_eq(ulfius_init_request(&request), U_OK);
+  ck_assert_int_eq(ulfius_init_response(&response), U_OK);
+  ck_assert_int_eq(ulfius_set_request_properties(&request, U_OPT_HTTP_URL, 
"http://localhost:8080/rest/"; VALUE1 "/" VALUE3 "/" VALUE4,
+                                                           U_OPT_NONE), U_OK);
+  ck_assert_int_eq(ulfius_send_http_request(&request, &response), U_OK);
+  ck_assert_int_eq(208, response.status);
+  ulfius_clean_request(&request);
+  ulfius_clean_response(&response);
+
+  ulfius_stop_framework(&u_instance);
+  ulfius_clean_instance(&u_instance);
+}
+END_TEST
+
 #ifndef U_DISABLE_GNUTLS
 START_TEST(test_ulfius_server_ca_trust)
 {
@@ -1569,6 +1639,7 @@
   tcase_add_test(tc_core, test_ulfius_follow_redirect);
   tcase_add_test(tc_core, test_ulfius_shared_data);
   tcase_add_test(tc_core, test_ulfius_malformed_requests);
+  tcase_add_test(tc_core, test_ulfius_send_http_request);
 #ifndef U_DISABLE_GNUTLS
   tcase_add_test(tc_core, test_ulfius_server_ca_trust);
   tcase_add_test(tc_core, test_ulfius_client_certificate);

Reply via email to