Tim Armstrong created IMPALA-8151: ------------------------------------- Summary: HiveUdfCall assumes StringValue is 16 bytes Key: IMPALA-8151 URL: https://issues.apache.org/jira/browse/IMPALA-8151 Project: IMPALA Issue Type: Bug Components: Backend Affects Versions: Impala 3.2.0 Reporter: Tim Armstrong Assignee: Pooja Nilangekar
HiveUdfCall has the sizes of internal types hardcoded as magic numbers: {code} switch (GetChild(i)->type().type) { case TYPE_BOOLEAN: case TYPE_TINYINT: // Using explicit sizes helps the compiler unroll memcpy memcpy(input_ptr, v, 1); break; case TYPE_SMALLINT: memcpy(input_ptr, v, 2); break; case TYPE_INT: case TYPE_FLOAT: memcpy(input_ptr, v, 4); break; case TYPE_BIGINT: case TYPE_DOUBLE: memcpy(input_ptr, v, 8); break; case TYPE_TIMESTAMP: case TYPE_STRING: case TYPE_VARCHAR: memcpy(input_ptr, v, 16); break; default: DCHECK(false) << "NYI"; } {code} STRING and VARCHAR were only 16 bytes because of padding. This padding is removed by IMPALA-7367, so this will read past the end of the actual value. This could in theory lead to a crash. We need to change the value, but we should probably also switch to sizeof(StringValue) so that it doesn't get broken by similar changes in future. -- This message was sent by Atlassian JIRA (v7.6.3#76005)