Merge pull request #2408 from amaanq/codeql-bugs

fix(lib): explicitly cast numbers to the same size in potential spots for infinite loops
This commit is contained in:
Amaan Qureshi 2023-07-19 16:11:43 -04:00 committed by GitHub
commit 8f73fb502f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 10 deletions

View file

@ -78,7 +78,7 @@ TSSymbol ts_language_symbol_for_name(
bool is_named
) {
if (!strncmp(string, "ERROR", length)) return ts_builtin_sym_error;
uint32_t count = ts_language_symbol_count(self);
uint16_t count = (uint16_t)ts_language_symbol_count(self);
for (TSSymbol i = 0; i < count; i++) {
TSSymbolMetadata metadata = ts_language_symbol_metadata(self, i);
if ((!metadata.visible && !metadata.supertype) || metadata.named != is_named) continue;
@ -121,7 +121,7 @@ TSFieldId ts_language_field_id_for_name(
const char *name,
uint32_t name_length
) {
uint32_t count = ts_language_field_count(self);
uint16_t count = (uint16_t)ts_language_field_count(self);
for (TSSymbol i = 1; i < count + 1; i++) {
switch (strncmp(name, self->field_names[i], name_length)) {
case 0:

View file

@ -1328,7 +1328,7 @@ static void ts_parser__handle_error(
TSStateId state = ts_stack_state(self->stack, v);
for (
TSSymbol missing_symbol = 1;
missing_symbol < self->language->token_count;
missing_symbol < (uint16_t)self->language->token_count;
missing_symbol++
) {
TSStateId state_after_missing_symbol = ts_language_next_state(

View file

@ -416,7 +416,7 @@ static CaptureListPool capture_list_pool_new(void) {
}
static void capture_list_pool_reset(CaptureListPool *self) {
for (uint16_t i = 0; i < self->list.size; i++) {
for (uint16_t i = 0; i < (uint16_t)self->list.size; i++) {
// This invalid size means that the list is not in use.
self->list.contents[i].size = UINT32_MAX;
}
@ -424,7 +424,7 @@ static void capture_list_pool_reset(CaptureListPool *self) {
}
static void capture_list_pool_delete(CaptureListPool *self) {
for (uint16_t i = 0; i < self->list.size; i++) {
for (uint16_t i = 0; i < (uint16_t)self->list.size; i++) {
array_delete(&self->list.contents[i]);
}
array_delete(&self->list);
@ -449,7 +449,7 @@ static bool capture_list_pool_is_empty(const CaptureListPool *self) {
static uint16_t capture_list_pool_acquire(CaptureListPool *self) {
// First see if any already allocated capture list is currently unused.
if (self->free_capture_list_count > 0) {
for (uint16_t i = 0; i < self->list.size; i++) {
for (uint16_t i = 0; i < (uint16_t)self->list.size; i++) {
if (self->list.contents[i].size == UINT32_MAX) {
array_clear(&self->list.contents[i]);
self->free_capture_list_count--;
@ -696,7 +696,7 @@ static void capture_quantifiers_add_all(
if (self->size < quantifiers->size) {
array_grow_by(self, quantifiers->size - self->size);
}
for (uint16_t id = 0; id < quantifiers->size; id++) {
for (uint16_t id = 0; id < (uint16_t)quantifiers->size; id++) {
uint8_t *quantifier = array_get(quantifiers, id);
uint8_t *own_quantifier = array_get(self, id);
*own_quantifier = (uint8_t) quantifier_add((TSQuantifier) *own_quantifier, (TSQuantifier) *quantifier);
@ -708,7 +708,7 @@ static void capture_quantifiers_mul(
CaptureQuantifiers *self,
TSQuantifier quantifier
) {
for (uint16_t id = 0; id < self->size; id++) {
for (uint16_t id = 0; id < (uint16_t)self->size; id++) {
uint8_t *own_quantifier = array_get(self, id);
*own_quantifier = (uint8_t) quantifier_mul((TSQuantifier) *own_quantifier, quantifier);
}
@ -1519,7 +1519,7 @@ static bool ts_query__analyze_patterns(TSQuery *self, unsigned *error_offset) {
AnalysisSubgraph subgraph = { .symbol = parent_symbol };
array_insert_sorted_by(&subgraphs, .symbol, subgraph);
}
for (TSSymbol sym = self->language->token_count; sym < self->language->symbol_count; sym++) {
for (TSSymbol sym = (uint16_t)self->language->token_count; sym < (uint16_t)self->language->symbol_count; sym++) {
if (!ts_language_symbol_metadata(self->language, sym).visible) {
AnalysisSubgraph subgraph = { .symbol = sym };
array_insert_sorted_by(&subgraphs, .symbol, subgraph);
@ -1533,7 +1533,7 @@ static bool ts_query__analyze_patterns(TSQuery *self, unsigned *error_offset) {
// with information about the node that would be created.
// 3) A list of predecessor states for each state.
StatePredecessorMap predecessor_map = state_predecessor_map_new(self->language);
for (TSStateId state = 1; state < self->language->state_count; state++) {
for (TSStateId state = 1; state < (uint16_t)self->language->state_count; state++) {
unsigned subgraph_index, exists;
LookaheadIterator lookahead_iterator = ts_language_lookaheads(self->language, state);
while (ts_lookahead_iterator_next(&lookahead_iterator)) {