Commit d04b76ae7ac7cf2de13107b5bea6b376564e4c8d

Authored by Perry Werneck
1 parent 2fb545f7

Fixing segfault.

src/core/array.c
@@ -61,7 +61,7 @@ void lib3270_string_array_free(LIB3270_STRING_ARRAY *array) @@ -61,7 +61,7 @@ void lib3270_string_array_free(LIB3270_STRING_ARRAY *array)
61 } 61 }
62 } 62 }
63 63
64 -void lib3270_string_array_append(LIB3270_STRING_ARRAY *array, const char *str) 64 +static void lib3270_string_array_realloc(LIB3270_STRING_ARRAY *array)
65 { 65 {
66 if(array->str) 66 if(array->str)
67 { 67 {
@@ -73,8 +73,23 @@ void lib3270_string_array_append(LIB3270_STRING_ARRAY *array, const char *str) @@ -73,8 +73,23 @@ void lib3270_string_array_append(LIB3270_STRING_ARRAY *array, const char *str)
73 array->length = 0; // Just in case. 73 array->length = 0; // Just in case.
74 } 74 }
75 75
  76 +}
  77 +
  78 +void lib3270_string_array_append(LIB3270_STRING_ARRAY *array, const char *str)
  79 +{
  80 + lib3270_string_array_realloc(array);
76 array->str[array->length++] = strdup(str); 81 array->str[array->length++] = strdup(str);
  82 +}
  83 +
  84 +void lib3270_string_array_append_with_length(LIB3270_STRING_ARRAY *array, const char *str, size_t length)
  85 +{
  86 + lib3270_string_array_realloc(array);
  87 +
  88 + char * buffer = lib3270_malloc(length+1);
  89 + memcpy(buffer,str,length);
  90 + buffer[length] = 0;
77 91
  92 + array->str[array->length++] = buffer;
78 } 93 }
79 94
80 void lib3270_autoptr_cleanup_LIB3270_STRING_ARRAY(LIB3270_STRING_ARRAY **ptr) 95 void lib3270_autoptr_cleanup_LIB3270_STRING_ARRAY(LIB3270_STRING_ARRAY **ptr)
src/include/array.h
@@ -48,6 +48,8 @@ @@ -48,6 +48,8 @@
48 LIB3270_INTERNAL LIB3270_STRING_ARRAY * lib3270_string_array_new(void); 48 LIB3270_INTERNAL LIB3270_STRING_ARRAY * lib3270_string_array_new(void);
49 LIB3270_INTERNAL void lib3270_string_array_free(LIB3270_STRING_ARRAY *object); 49 LIB3270_INTERNAL void lib3270_string_array_free(LIB3270_STRING_ARRAY *object);
50 LIB3270_INTERNAL void lib3270_string_array_append(LIB3270_STRING_ARRAY *object, const char *str); 50 LIB3270_INTERNAL void lib3270_string_array_append(LIB3270_STRING_ARRAY *object, const char *str);
  51 + LIB3270_INTERNAL void lib3270_string_array_append_with_length(LIB3270_STRING_ARRAY *array, const char *str, size_t length);
  52 +
51 LIB3270_INTERNAL void lib3270_autoptr_cleanup_LIB3270_STRING_ARRAY(LIB3270_STRING_ARRAY **ptr); 53 LIB3270_INTERNAL void lib3270_autoptr_cleanup_LIB3270_STRING_ARRAY(LIB3270_STRING_ARRAY **ptr);
52 54
53 #endif // LIB3270_ARRAY_H_INCLUDED 55 #endif // LIB3270_ARRAY_H_INCLUDED
@@ -205,7 +205,7 @@ int lib3270_crl_new_from_dist_points(H3270 *hSession, void *ssl_error, CRL_DIST_ @@ -205,7 +205,7 @@ int lib3270_crl_new_from_dist_points(H3270 *hSession, void *ssl_error, CRL_DIST_
205 #endif // OpenSSL 1.1.0+ 205 #endif // OpenSSL 1.1.0+
206 if(data) 206 if(data)
207 { 207 {
208 - lib3270_string_array_append(uris,(char *) data); 208 + lib3270_string_array_append_with_length(uris,(char *) data, (size_t) ASN1_STRING_length(uri));
209 } 209 }
210 } 210 }
211 211