Index: channels/sig_pri.c =================================================================== --- channels/sig_pri.c (revision 312995) +++ channels/sig_pri.c (working copy) @@ -758,8 +758,14 @@ int length = ast_pri_pack_hex_string(pri_subaddress->data, ast_subaddress->str, sizeof(pri_subaddress->data)); - pri_subaddress->length = length; - pri_subaddress->odd_even_indicator = (length & 1); + pri_subaddress->length = length; /* packed data length */ + + length = strlen(ast_subaddress->str); + if (length > 2 * sizeof(pri_subaddress->data)) { + pri_subaddress->odd_even_indicator = 0; + } else { + pri_subaddress->odd_even_indicator = (length & 1); + } pri_subaddress->valid = 1; } } @@ -7278,12 +7284,10 @@ s++; /* prefix */ /* 'n' = NSAP */ - /* 'U' = odd, 'u'= even */ + /* 'u' = User Specified */ /* Default = NSAP */ switch (*s) { case 'U': - dialed_subaddress.odd_even_indicator = 1; - /* fall through */ case 'u': s++; dialed_subaddress.type = 2;