|
1 | 1 | /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */ |
2 | 2 | /* |
3 | 3 | * Copyright (c) 2014-2016 Intel, Inc. All rights reserved. |
4 | | - * Copyright (c) 2014-2015 Research Organization for Information Science |
| 4 | + * Copyright (c) 2014-2016 Research Organization for Information Science |
5 | 5 | * and Technology (RIST). All rights reserved. |
6 | 6 | * Copyright (c) 2014-2015 Artem Y. Polyakov <[email protected]>. |
7 | 7 | * All rights reserved. |
|
56 | 56 | #include "src/util/output.h" |
57 | 57 | #include "src/util/pmix_environ.h" |
58 | 58 | #include "src/util/progress_threads.h" |
| 59 | +#include "src/util/strnlen.h" |
59 | 60 | #include "src/usock/usock.h" |
60 | 61 | #include "src/sec/pmix_sec.h" |
61 | 62 |
|
@@ -315,31 +316,41 @@ static pmix_status_t parse_connect_ack (char *msg, int len, |
315 | 316 | char **nspace, int *rank, |
316 | 317 | char **version, char **cred) |
317 | 318 | { |
318 | | - if ((int)strnlen (msg, len) < len) { |
| 319 | + int msglen; |
| 320 | + |
| 321 | + PMIX_STRNLEN(msglen, msg, len); |
| 322 | + if (msglen < len) { |
319 | 323 | *nspace = msg; |
320 | 324 | msg += strlen(*nspace) + 1; |
321 | 325 | len -= strlen(*nspace) + 1; |
322 | | - } else |
| 326 | + } else { |
323 | 327 | return PMIX_ERR_BAD_PARAM; |
| 328 | + } |
324 | 329 |
|
325 | | - if ((int)sizeof(int) <= len) { |
326 | | - *rank = *(int *)msg; |
| 330 | + PMIX_STRNLEN(msglen, msg, len); |
| 331 | + if (msglen <= len) { |
| 332 | + memcpy(rank, msg, sizeof(int)); |
327 | 333 | msg += sizeof(int); |
328 | 334 | len -= sizeof(int); |
329 | | - } else |
| 335 | + } else { |
330 | 336 | return PMIX_ERR_BAD_PARAM; |
| 337 | + } |
331 | 338 |
|
332 | | - if ((int)strnlen (msg, len) < len) { |
| 339 | + PMIX_STRNLEN(msglen, msg, len); |
| 340 | + if (msglen < len) { |
333 | 341 | *version = msg; |
334 | 342 | msg += strlen(*version) + 1; |
335 | 343 | len -= strlen(*version) + 1; |
336 | | - } else |
| 344 | + } else { |
337 | 345 | return PMIX_ERR_BAD_PARAM; |
| 346 | + } |
338 | 347 |
|
339 | | - if ((int)strnlen (msg, len) < len) |
| 348 | + PMIX_STRNLEN(msglen, msg, len); |
| 349 | + if (msglen < len) |
340 | 350 | *cred = msg; |
341 | | - else |
| 351 | + else { |
342 | 352 | *cred = NULL; |
| 353 | + } |
343 | 354 |
|
344 | 355 | return PMIX_SUCCESS; |
345 | 356 | } |
|
0 commit comments