Skip to content

Commit 8e16f47

Browse files
authored
Merge pull request #1688 from artpol84/fix_base64
Fix base64 implementation in pmix framework.
2 parents b8e93e9 + 725eea2 commit 8e16f47

File tree

1 file changed

+18
-20
lines changed

1 file changed

+18
-20
lines changed

opal/mca/pmix/base/pmix_base_fns.c

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
* Copyright (c) 2014-2015 Intel, Inc. All rights reserved.
66
* Copyright (c) 2014-2015 Research Organization for Information Science
77
* and Technology (RIST). All rights reserved.
8+
* Copyright (c) 2016 Mellanox Technologies, Inc.
9+
* All rights reserved.
810
* $COPYRIGHT$
911
*
1012
* Additional copyrights may follow
@@ -566,7 +568,7 @@ int opal_pmix_base_cache_keys_locally(const opal_process_name_t* id, const char*
566568
}
567569

568570
/* search for each key in the decoded data */
569-
for (offset = 0 ; offset < len && '\0' != tmp_val[offset] ; ) {
571+
for (offset = 0 ; offset < len ; ) {
570572
/* type */
571573
tmp = tmp_val + offset + strlen (tmp_val + offset) + 1;
572574
/* size */
@@ -679,31 +681,30 @@ static inline unsigned char pmi_base64_encsym (unsigned char value) {
679681
assert (value < 64);
680682

681683
if (value < 26) {
682-
return 'A' + value;
684+
return 'A' + value;
683685
} else if (value < 52) {
684-
return 'a' + (value - 26);
686+
return 'a' + (value - 26);
685687
} else if (value < 62) {
686-
return '0' + (value - 52);
688+
return '0' + (value - 52);
687689
}
688690

689691
return (62 == value) ? '+' : '/';
690692
}
691693

692694
static inline unsigned char pmi_base64_decsym (unsigned char value) {
693695
if ('+' == value) {
694-
return 62;
696+
return 62;
695697
} else if ('/' == value) {
696-
return 63;
698+
return 63;
697699
} else if (' ' == value) {
698-
return 64;
700+
return 64;
699701
} else if (value <= '9') {
700-
return (value - '0') + 52;
702+
return (value - '0') + 52;
701703
} else if (value <= 'Z') {
702-
return (value - 'A');
704+
return (value - 'A');
703705
} else if (value <= 'z') {
704-
return (value - 'a') + 26;
706+
return (value - 'a') + 26;
705707
}
706-
707708
return 64;
708709
}
709710

@@ -725,12 +726,12 @@ static inline int pmi_base64_decode_block (const char in[4], unsigned char out[3
725726

726727
out[0] = in_dec[0] << 2 | in_dec[1] >> 4;
727728
if (64 == in_dec[2]) {
728-
return 1;
729+
return 1;
729730
}
730731

731732
out[1] = in_dec[1] << 4 | in_dec[2] >> 2;
732733
if (64 == in_dec[3]) {
733-
return 2;
734+
return 2;
734735
}
735736

736737
out[2] = ((in_dec[2] << 6) & 0xc0) | in_dec[3];
@@ -746,7 +747,7 @@ static char *pmi_encode(const void *val, size_t vallen)
746747

747748
outdata = calloc (((2 + vallen) * 4) / 3 + 2, 1);
748749
if (NULL == outdata) {
749-
return NULL;
750+
return NULL;
750751
}
751752

752753
for (i = 0, tmp = outdata ; i < vallen ; i += 3, tmp += 4) {
@@ -760,24 +761,21 @@ static char *pmi_encode(const void *val, size_t vallen)
760761

761762
static uint8_t *pmi_decode (const char *data, size_t *retlen)
762763
{
763-
size_t input_len = (strlen (data) - 1) / 4;
764+
size_t input_len = strlen (data) / 4;
764765
unsigned char *ret;
765766
int out_len;
766767
size_t i;
767768

768769
/* default */
769770
*retlen = 0;
770771

771-
ret = calloc (1, 3 * input_len + 1);
772+
ret = calloc (1, 3 * input_len);
772773
if (NULL == ret) {
773774
return ret;
774775
}
775-
776776
for (i = 0, out_len = 0 ; i < input_len ; i++, data += 4) {
777-
out_len += pmi_base64_decode_block(data, ret + 3 * i);
777+
out_len += pmi_base64_decode_block(data, ret + 3 * i);
778778
}
779-
780-
ret[out_len] = '\0';
781779
*retlen = out_len;
782780
return ret;
783781
}

0 commit comments

Comments
 (0)