@@ -193,6 +193,42 @@ uint32_t CSRHandlerClass::getTimestamp() {
193
193
return ts;
194
194
}
195
195
196
+ bool CSRHandlerClass::parseDateFromStr (char *str) {
197
+ char *tok[3 ];
198
+ int i = 1 ;
199
+ tok[0 ] = strtok (str, " -" );
200
+ for (; i < 3 ; i++) {
201
+ char *t = strtok (NULL , " -" );
202
+ if (t == NULL ){
203
+ break ;
204
+ }
205
+ tok[i] = t;
206
+ }
207
+ if (i < 3 ) {
208
+ return false ;
209
+ }
210
+
211
+ char *day = strtok (tok[2 ], " T" );
212
+ char *time = strtok (NULL , " T" );
213
+
214
+ if (time == NULL ){
215
+ return false ;
216
+ }
217
+
218
+ char *hour = strtok (time, " :" );
219
+
220
+ if (strlen (tok[0 ]) != 4 || strlen (tok[1 ]) != 2 || strlen (day) != 2 || strlen (hour) != 2 ){
221
+ return false ;
222
+ }
223
+
224
+ _issueYear = atoi (tok[0 ]);
225
+ _issueMonth = atoi (tok[1 ]);
226
+ _issueDay = atoi (day);
227
+ _issueHour = atoi (hour);
228
+
229
+ return true ;
230
+ }
231
+
196
232
CSRHandlerClass::CSRHandlerStates CSRHandlerClass::handleBuildCSR () {
197
233
if (!_certForCSR) {
198
234
_certForCSR = new ECP256Certificate ();
@@ -296,7 +332,7 @@ CSRHandlerClass::CSRHandlerStates CSRHandlerClass::handleParseResponse() {
296
332
if (i < 6 || strlen (token[0 ]) != 36 || strlen (token[1 ]) != 40
297
333
|| strlen (token[2 ]) < 10 || strlen (token[3 ]) != 32
298
334
|| strlen (token[4 ]) != 64 || strlen (token[5 ]) != 64
299
- || sscanf (token[2 ], " %4d-%2d-%2dT%2d " , &_issueYear, &_issueMonth, &_issueDay, &_issueHour) != 4 ){
335
+ || ! parseDateFromStr (token[2 ]) ){
300
336
updateNextRequestAt ();
301
337
DEBUG_ERROR (" CSRH::%s Error parsing response, retrying in %d ms" , __FUNCTION__, _nextRequestAt - millis ());
302
338
return CSRHandlerStates::REQUEST_SIGNATURE;
0 commit comments