@@ -193,6 +193,42 @@ uint32_t CSRHandlerClass::getTimestamp() {
193193 return ts;
194194}
195195
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+
196232CSRHandlerClass::CSRHandlerStates CSRHandlerClass::handleBuildCSR () {
197233 if (!_certForCSR) {
198234 _certForCSR = new ECP256Certificate ();
@@ -296,7 +332,7 @@ CSRHandlerClass::CSRHandlerStates CSRHandlerClass::handleParseResponse() {
296332 if (i < 6 || strlen (token[0 ]) != 36 || strlen (token[1 ]) != 40
297333 || strlen (token[2 ]) < 10 || strlen (token[3 ]) != 32
298334 || 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 ]) ){
300336 updateNextRequestAt ();
301337 DEBUG_ERROR (" CSRH::%s Error parsing response, retrying in %d ms" , __FUNCTION__, _nextRequestAt - millis ());
302338 return CSRHandlerStates::REQUEST_SIGNATURE;
0 commit comments