diff --git a/CHANGELOG b/CHANGELOG index 08cf5aa9c2..f82d3a471f 100755 --- a/CHANGELOG +++ b/CHANGELOG @@ -3,6 +3,8 @@ v1.4.11 (XXXX-XX-XX) * fixed small memleak in AQL optimiser +* fixed access to potentially uninitialised variable when collection had a cap constraint + v1.4.10 (2014-02-21) -------------------- diff --git a/arangod/Ahuacatl/ahuacatl-codegen.c b/arangod/Ahuacatl/ahuacatl-codegen.c index 365eb4073e..6d797a69ef 100644 --- a/arangod/Ahuacatl/ahuacatl-codegen.c +++ b/arangod/Ahuacatl/ahuacatl-codegen.c @@ -1262,8 +1262,9 @@ static void GenerateHashAccess (TRI_aql_codegen_js_t* const generator, ScopeOutput(generator, ")"); return; } - - if (fieldAccess->_value._reference._operator == TRI_AQL_NODE_OPERATOR_BINARY_IN) { + + if (fieldAccess->_type == TRI_AQL_ACCESS_REFERENCE && + fieldAccess->_value._reference._operator == TRI_AQL_NODE_OPERATOR_BINARY_IN) { ScopeOutput(generator, "aql.GET_DOCUMENTS_HASH_LIST('"); ScopeOutput(generator, collectionName); ScopeOutput(generator, "', "); @@ -1407,7 +1408,8 @@ static void GenerateSkiplistAccess (TRI_aql_codegen_js_t* const generator, return; } - if (fieldAccess->_value._reference._operator == TRI_AQL_NODE_OPERATOR_BINARY_IN) { + if (fieldAccess->_type == TRI_AQL_ACCESS_REFERENCE && + fieldAccess->_value._reference._operator == TRI_AQL_NODE_OPERATOR_BINARY_IN) { ScopeOutput(generator, "aql.GET_DOCUMENTS_SKIPLIST_LIST('"); ScopeOutput(generator, collectionName); ScopeOutput(generator, "', "); @@ -1527,8 +1529,9 @@ static void GenerateBitarrayAccess (TRI_aql_codegen_js_t* const generator, ScopeOutput(generator, ")"); return; } - - if (fieldAccess->_value._reference._operator == TRI_AQL_NODE_OPERATOR_BINARY_IN) { + + if (fieldAccess->_type == TRI_AQL_ACCESS_REFERENCE && + fieldAccess->_value._reference._operator == TRI_AQL_NODE_OPERATOR_BINARY_IN) { ScopeOutput(generator, "aql.GET_DOCUMENTS_BITARRAY_LIST('"); ScopeOutput(generator, collectionName); ScopeOutput(generator, "', "); diff --git a/arangod/Ahuacatl/ahuacatl-index.c b/arangod/Ahuacatl/ahuacatl-index.c index bb83c4ffb5..5d07b522d3 100644 --- a/arangod/Ahuacatl/ahuacatl-index.c +++ b/arangod/Ahuacatl/ahuacatl-index.c @@ -253,7 +253,7 @@ static TRI_aql_index_t* PickIndex (TRI_aql_context_t* const context, /// @brief check eligibility of an index for further inspection //////////////////////////////////////////////////////////////////////////////// -static bool CanUseIndex (const TRI_index_t* const idx) { +static bool CanUseIndex (TRI_index_t const* idx) { if (idx->_fields._length == 0) { // index should contain at least one field return false; diff --git a/arangod/CapConstraint/cap-constraint.c b/arangod/CapConstraint/cap-constraint.c index f075a2e0ec..cef7480a92 100644 --- a/arangod/CapConstraint/cap-constraint.c +++ b/arangod/CapConstraint/cap-constraint.c @@ -296,6 +296,7 @@ TRI_index_t* TRI_CreateCapConstraint (struct TRI_primary_collection_s* primary, idx->typeName = TypeNameCapConstraint; TRI_InitIndex(idx, TRI_IDX_TYPE_CAP_CONSTRAINT, primary, false, true); + TRI_InitVectorString(&idx->_fields, TRI_CORE_MEM_ZONE); idx->json = JsonCapConstraint; idx->removeIndex = RemoveIndexCapConstraint; @@ -316,6 +317,7 @@ TRI_index_t* TRI_CreateCapConstraint (struct TRI_primary_collection_s* primary, //////////////////////////////////////////////////////////////////////////////// void TRI_DestroyCapConstraint (TRI_index_t* idx) { + TRI_DestroyVectorString(&idx->_fields); } ////////////////////////////////////////////////////////////////////////////////