Commit f64e15d75bdbeb3b4e307ea825788a2a4bc5d683

Authored by Perry Werneck
1 parent 0f27a609

Changing CRL buffer to dynamic on windows version.

Showing 1 changed file with 20 additions and 9 deletions   Show diff stats
src/lib3270/ssl/windows/getcrl.c
... ... @@ -82,14 +82,25 @@ typedef struct _curldata
82 82 H3270 * hSession;
83 83 SSL_ERROR_MESSAGE * message;
84 84 char errbuf[CURL_ERROR_SIZE];
85   - unsigned char contents[CRL_DATA_LENGTH];
  85 + struct {
  86 + size_t length;
  87 + unsigned char * contents;
  88 + } data;
86 89 } CURLDATA;
87 90  
88 91 static inline void lib3270_autoptr_cleanup_CURLDATA(CURLDATA **ptr)
89 92 {
90 93 debug("%s(%p)",__FUNCTION__,*ptr);
91 94 if(*ptr)
92   - lib3270_free(*ptr);
  95 + {
  96 + CURLDATA *cdata = *ptr;
  97 +
  98 + if(cdata->data.contents) {
  99 + lib3270_free(cdata->data.contents);
  100 + cdata->data.contents = NULL;
  101 + }
  102 + lib3270_free(cdata);
  103 + }
93 104 *ptr = NULL;
94 105 }
95 106  
... ... @@ -117,17 +128,15 @@ static size_t internal_curl_write_callback(void *contents, size_t size, size_t n
117 128  
118 129 for(ix = 0; ix < realsize; ix++)
119 130 {
120   - if(data->length >= CRL_DATA_LENGTH)
  131 + if(data->length >= data->data.length)
121 132 {
122   - lib3270_write_log(NULL,"ssl","CRL Data block is bigger than allocated block (%u)", (unsigned int) CRL_DATA_LENGTH);
123   - return 0;
  133 + data->data.length += (CRL_DATA_LENGTH + realsize);
  134 + data->data.contents = lib3270_realloc(data->data.contents,data->data.length);
124 135 }
125 136  
126   - data->contents[data->length++] = *(ptr++);
  137 + data->data.contents[data->length++] = *(ptr++);
127 138 }
128 139  
129   -// debug("\n%s\n-------------------------------------------", data->contents);
130   -
131 140 return realsize;
132 141 }
133 142  
... ... @@ -297,9 +306,11 @@ int lib3270_get_X509_CRL(H3270 *hSession, SSL_ERROR_MESSAGE * message)
297 306 return -1;
298 307 }
299 308  
  309 + trace_ssl(hSession,"CRL Data has %u bytes",(unsigned int) crl_data->length);
  310 +
300 311 if(ct)
301 312 {
302   - const unsigned char * data = crl_data->contents;
  313 + const unsigned char * data = crl_data->data.contents;
303 314  
304 315 trace_ssl(crl_data->hSession, "Content-type: %s", ct);
305 316  
... ...