commit 333252b443356f2bb9733ea2656a09c66d2fd203
parent e7153ba8e36b60b8d7e7a10fa0c436834774ef37
Author: Henrik RydgÄrd <hrydgard@gmail.com>
Date: Fri, 21 Jul 2023 17:24:20 +0200
When reading headers, don't update res->headers until the loop is done.
Diffstat:
3 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/src/naett_android.c b/src/naett_android.c
@@ -171,6 +171,7 @@ static void* processRequest(void* data) {
jarray headers = call(env, headerSet, "toArray", "()[Ljava/lang/Object;");
jsize headerCount = (*env)->GetArrayLength(env, headers);
+ KVLink *firstHeader = NULL;
for (int i = 0; i < headerCount; i++) {
jstring name = (*env)->GetObjectArrayElement(env, headers, i);
if (name == NULL) {
@@ -185,8 +186,8 @@ static void* processRequest(void* data) {
naettAlloc(KVLink, node);
node->key = strdup(nameString);
node->value = strdup(valueString);
- node->next = res->headers;
- res->headers = node;
+ node->next = firstHeader;
+ firstHeader = node;
(*env)->ReleaseStringUTFChars(env, name, nameString);
(*env)->ReleaseStringUTFChars(env, value, valueString);
@@ -195,6 +196,7 @@ static void* processRequest(void* data) {
(*env)->DeleteLocalRef(env, value);
(*env)->DeleteLocalRef(env, values);
}
+ res->headers = firstHeader;
int statusCode = intCall(env, connection, "getResponseCode", "()I");
diff --git a/src/naett_osx.c b/src/naett_osx.c
@@ -97,13 +97,15 @@ void didReceiveData(id self, SEL _sel, id session, id dataTask, id data) {
objc_msgSend_t(NSInteger, id*, id*, NSUInteger)(
allHeaders, sel("getObjects:andKeys:count:"), headerValues, headerNames, headerCount);
+ KVLink *firstHeader = NULL;
for (int i = 0; i < headerCount; i++) {
naettAlloc(KVLink, node);
node->key = strdup(objc_msgSend_t(const char*)(headerNames[i], sel("UTF8String")));
node->value = strdup(objc_msgSend_t(const char*)(headerValues[i], sel("UTF8String")));
- node->next = res->headers;
- res->headers = node;
+ node->next = firstHeader;
+ firstHeader = node;
}
+ res->headers = firstHeader;
}
const void* bytes = objc_msgSend_t(const void*)(data, sel("bytes"));
diff --git a/src/naett_win.c b/src/naett_win.c
@@ -66,6 +66,7 @@ static LPCWSTR packHeaders(InternalRequest* req) {
static void unpackHeaders(InternalResponse* res, LPWSTR packed) {
size_t len = 0;
+ KVLink* firstHeader = NULL;
while ((len = wcslen(packed)) != 0) {
char* header = winToUTF8(packed);
char* split = strchr(header, ':');
@@ -78,12 +79,13 @@ static void unpackHeaders(InternalResponse* res, LPWSTR packed) {
naettAlloc(KVLink, node);
node->key = strdup(header);
node->value = strdup(split);
- node->next = res->headers;
- res->headers = node;
+ node->next = firstHeader;
+ firstHeader = node;
}
free(header);
packed += len + 1;
}
+ res->headers = firstHeader;
}
static void CALLBACK callback(HINTERNET request,