if (range_valid) {
char buf[64];
- if (range_exact) {
- sprintf(buf, "[=%zu]", range_length);
- } else if (type == REF_ZERO) {
+ if (range_exact || type == REF_ZERO) {
sprintf(buf, "[%zu]", range_length);
} else {
sprintf(buf, "[%zu+%zu]", range_start, range_length);
if (*t == '[') {
t++;
+ // An equal sign was once used for a length assertion but is now
+ // deprecated. Skip it if present, and mark that we are expecting a
+ // length-only reference.
if (*t == '=') {
range_exact = true;
t++;
if (*t == ']') {
string val(s, t - s);
range2 = atoll(val.c_str());
+ range_exact = true;
} else {
if (*t != '+')
return ObjectReference();