synctime: fix off-by-one read and write to a read-only buffer (Windows)
No binary (build failed)
—
(log yok)
| @@ -134,9 +134,12 @@ static size_t SyncTime_CURL_WriteHeader(void *ptr, size_t size, size_t nmemb, | |
| char *field = ptr; | |
| *TmpStr1 = 0; | |
| *TmpStr2 = 0; | |
| - | if(nmemb && (field[nmemb] == '\n')) { |
| - | field[nmemb] = 0; /* null-terminated */ |
| - | RetVal = sscanf(field, "Date: %25s %hu %25s %hu %hu:%hu:%hu", |
| + | if(nmemb && (field[nmemb - 1] == '\n')) { |
| + | char header[100]; |
| + | size_t len = nmemb < sizeof(header) ? nmemb : sizeof(header) - 1; |
| + | memcpy(header, field, len); |
| + | header[len] = 0; /* null-terminate local copy */ |
| + | RetVal = sscanf(header, "Date: %25s %hu %25s %hu %hu:%hu:%hu", |
| TmpStr1, &SYSTime.wDay, TmpStr2, &SYSTime.wYear, | |
| &SYSTime.wHour, &SYSTime.wMinute, | |
| &SYSTime.wSecond); | |