Potential memory leak in hlindex_open when open_table_from_share fails
@JoeJRW y travaille déjà.
Depuis le 18/5/2026.
Évaluation
Cette issue n'a pas encore été évaluée.
Description
In sql/vidx/vidx_index.cc, the hlindex_open function allocates memory for hlindex with my_malloc() at line 980, and increments s->hlindex->ref_count() at lines 988-990 before calling open_table_from_share().
However, when open_table_from_share() fails (error != 0), the function jumps to error_end at line 1001 without:
Decrementing the ref_count that was previously incremented
Freeing the allocated hlindex memory
Code location :
// Line 980: Allocate hlindex
hlindex = (TABLE *)my_malloc(key_memory_TABLE, sizeof(*hlindex), MYF(MY_WME));
// Lines 987-990: Increment ref_count
if (s->hlindex->tmp_table == NO_TMP_TABLE) {
mysql_mutex_lock(&LOCK_open);
s->hlindex->increment_ref_count();
mysql_mutex_unlock(&LOCK_open);
}
// Lines 993-997: Call open_table_from_share
int error = open_table_from_share(in_use, s->hlindex, hlindex_name,
(uint)(HA_OPEN_KEYFILE | HA_OPEN_RNDFILE |
HA_GET_INDEX | HA_TRY_READ_ONLY),
EXTRA_RECORD, in_use->open_options,
hlindex, false, hlindex_dd);
// Lines 999-1001: Problem: When error != 0, no cleanup before goto error_end
if (error != 0 || hlindex == nullptr) {
error_message = "Failed to open_table_from_share.";
goto error_end; // Memory leak here!
}
Note: open_table_from_share() does NOT free the passed outparam pointer on failure (verified in sql/table.cc). It only cleans internal resources.
Suggested fix:
if (error != 0 || hlindex == nullptr) {
error_message = "Failed to open_table_from_share.";
if (hlindex != nullptr) {
if (s->hlindex->tmp_table == NO_TMP_TABLE) {
mysql_mutex_lock(&LOCK_open);
s->hlindex->decrement_ref_count();
mysql_mutex_unlock(&LOCK_open);
}
my_free(hlindex);
hlindex = nullptr;
}
goto error_end;
}
- Langage dominant
- C++
- Étoiles
- 6k
- Forks
- 902
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de alibaba/AliSQL
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 52/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 55/100
-
Deployment Architecture IssuesPeut-être à nouveau libre @p1p1bear l’a pris il y a 68 jours, et aucune pull request n’est ouverte. Ouverte
Toutes les issues de alibaba/AliSQL
Issues similaires
-
area/actorsystem bug tsan
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
ydb-platform/ydb#54282 ·
Les mainteneurs répondent en général sous 1 jour
-
bug needs triage
Difficulté 1/5 Moins d'une heure Accessibilité débutants 90/100
project-chip/connectedhomeip#74434 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
tenstorrent/tt-metal#58057 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
maplibre/maplibre-native#4690 ·
Les mainteneurs répondent en général sous 1 jour
-
comp-query-execution
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
ClickHouse/ClickHouse#122569 ·
Les mainteneurs répondent en général sous 1 jour