Skip to content
/ server Public
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion libmariadb
2 changes: 1 addition & 1 deletion sql/handler.cc
Original file line number Diff line number Diff line change
Expand Up @@ -417,7 +417,7 @@ handler *get_ha_partition(partition_info *part_info)
else
{
my_error(ER_OUTOFMEMORY, MYF(ME_FATAL),
static_cast<int>(sizeof(ha_partition)));
sizeof(ha_partition));
}
DBUG_RETURN(((handler*) partition));
}
Expand Down
132 changes: 132 additions & 0 deletions sql/item_jsonfunc.cc
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,24 @@ int st_append_json(String *s,
return 0;
}

str_len= json_unescape(json_cs, js, js + js_len, s->charset(),
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No need to do json_unescape twice!

(uchar *) s->end(), (uchar *) s->end() + str_len);
if (str_len > 0)
s->length(s->length() + str_len);

if (str_len >= 0)
return 0;

if (current_thd)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there's always current_thd! Please turn this into an assert?

{
if (str_len == JSON_ERROR_OUT_OF_SPACE)
my_error(ER_OUTOFMEMORY, MYF(0), (size_t)js_len);
else if (str_len == JSON_ERROR_ILLEGAL_SYMBOL)
push_warning_printf(current_thd, Sql_condition::WARN_LEVEL_WARN,
ER_JSON_BAD_CHR, ER_THD(current_thd, ER_JSON_BAD_CHR),
0, "st_append_json", 0);
}

return str_len;
}

Expand Down Expand Up @@ -805,6 +823,15 @@ String *Item_func_json_unquote::val_str(String *str)

error:
report_json_error(js, &je, 0);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

report_json_error already reports an error. Why do you need to duplicate this? I'd rather extend report_json_error() to include the length and extend it to report out of memory.

if (current_thd)
{
if (c_len == JSON_ERROR_OUT_OF_SPACE)
my_error(ER_OUTOFMEMORY, MYF(0), (size_t)je.value_len);
else if (c_len == JSON_ERROR_ILLEGAL_SYMBOL)
push_warning_printf(current_thd, Sql_condition::WARN_LEVEL_WARN,
ER_JSON_BAD_CHR, ER_THD(current_thd, ER_JSON_BAD_CHR),
0, "unquote", 0);
}
return js;
}

Expand Down Expand Up @@ -2108,6 +2135,38 @@ String *Item_func_json_array_insert::val_str(String *str)
(n_item == 0 && str->append(" ", 1)) ||
append_simple(str, item_pos, js->end() - item_pos))
goto return_null; /* Out of memory. */
my_ptrdiff_t size= item_pos - js->ptr();
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Either something is wrong with the diff or you've inadvertently left the original you're trying to change too.
Instead of unfolding the if() just please add a warning in its then branch.

if (append_simple(str, js->ptr(), size))
{
my_error(ER_OUTOFMEMORY, MYF(0), (size_t) size);
goto return_null; /* Out of memory. */
}
if (n_item > 0 && str->append(" ", 1))
{
my_error(ER_OUTOFMEMORY, MYF(0), (size_t)1);
goto return_null; /* Out of memory. */
}
if (append_json_value(str, args[n_arg+1], &tmp_val))
{
my_error(ER_OUTOFMEMORY, MYF(0), (size_t)tmp_val.length());
goto return_null; /* Out of memory. */
}
if (str->append(",", 1))
{
my_error(ER_OUTOFMEMORY, MYF(0), (size_t)1);
goto return_null; /* Out of memory. */
}
if (n_item == 0 && str->append(" ", 1))
{
my_error(ER_OUTOFMEMORY, MYF(0), (size_t)1);
goto return_null; /* Out of memory. */
}
size= js->end() - item_pos;
if (append_simple(str, item_pos, size))
{
my_error(ER_OUTOFMEMORY, MYF(0), (size_t) size);
goto return_null; /* Out of memory. */
}
}
else
{
Expand All @@ -2119,6 +2178,28 @@ String *Item_func_json_array_insert::val_str(String *str)
append_json_value(str, args[n_arg+1], &tmp_val) ||
append_simple(str, item_pos, js->end() - item_pos))
goto return_null; /* Out of memory. */
size= item_pos - js->ptr();
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ditto here: see the other comment.

if (append_simple(str, js->ptr(), size))
{
my_error(ER_OUTOFMEMORY, MYF(0), (size_t) size);
goto return_null; /* Out of memory. */
}
if (n_item > 0 && str->append(", ", 2))
{
my_error(ER_OUTOFMEMORY, MYF(0), (size_t)2);
goto return_null; /* Out of memory. */
}
if (append_json_value(str, args[n_arg+1], &tmp_val))
{
my_error(ER_OUTOFMEMORY, MYF(0), (size_t)tmp_val.length());
goto return_null; /* Out of memory. */
}
size= js->end() - item_pos;
if (append_simple(str, item_pos, size))
{
my_error(ER_OUTOFMEMORY, MYF(0), (size_t) size);
goto return_null; /* Out of memory. */
}
}

{
Expand Down Expand Up @@ -3688,6 +3769,19 @@ int Item_func_json_search::compare_json_value_wild(json_engine_t *je,
(uchar *) (esc_value.ptr() +
esc_value.alloced_length()));
if (esc_len <= 0)
{
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd consider using (the extended) report_json_error() here too.

if (current_thd)
{
if (esc_len == JSON_ERROR_OUT_OF_SPACE)
my_error(ER_OUTOFMEMORY, MYF(0), (size_t)je->value_len);
else if (esc_len == JSON_ERROR_ILLEGAL_SYMBOL)
{
push_warning_printf(current_thd, Sql_condition::WARN_LEVEL_WARN,
ER_JSON_BAD_CHR, ER_THD(current_thd, ER_JSON_BAD_CHR),
0, "comparison",
(int)(je->s.c_str - je->value));
}
}
return 0;

return collation.collation->wildcmp(
Expand Down Expand Up @@ -3933,10 +4027,28 @@ int Arg_comparator::compare_json_str_basic(Item *j, Item *s)
{
if (value2.realloc_with_extra_if_needed(je.value_len) ||
(c_len= json_unescape(js->charset(), je.value,
if (value2.realloc_with_extra_if_needed(je.value_len))
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you've again left the original call.

{
my_error(ER_OUTOFMEMORY, MYF(0), (size_t)je.value_len);
goto error;
}
if ((c_len= json_unescape(js->charset(), je.value,
je.value + je.value_len,
&my_charset_utf8mb3_general_ci,
(uchar *) value2.ptr(),
(uchar *) (value2.ptr() + je.value_len))) < 0)
{
if (current_thd)
{
if (c_len == JSON_ERROR_OUT_OF_SPACE)
my_error(ER_OUTOFMEMORY, MYF(0), (size_t)je.value_len);
else if (c_len == JSON_ERROR_ILLEGAL_SYMBOL)
{
push_warning_printf(current_thd, Sql_condition::WARN_LEVEL_WARN,
ER_JSON_BAD_CHR, ER_THD(current_thd, ER_JSON_BAD_CHR),
0, "comparison", (int)((const char *) je.s.c_str - js->ptr()));
}
}
goto error;

value2.length(c_len);
Expand Down Expand Up @@ -3982,11 +4094,31 @@ int Arg_comparator::compare_e_json_str_basic(Item *j, Item *s)
{
if (value1.realloc_with_extra_if_needed(value_len) ||
(c_len= json_unescape(value1.charset(), (uchar *) value,
if (value1.realloc_with_extra_if_needed(value_len))
{
my_error(ER_OUTOFMEMORY, MYF(0), (size_t)value_len);
return 1;
}
if ((c_len= json_unescape(value1.charset(), (uchar *) value,
(uchar *) value+value_len,
&my_charset_utf8mb3_general_ci,
(uchar *) value1.ptr(),
(uchar *) (value1.ptr() + value_len))) < 0)
return 1;
{
if (current_thd)
{
if (c_len == JSON_ERROR_OUT_OF_SPACE)
my_error(ER_OUTOFMEMORY, MYF(0), (size_t)value_len);
else if (c_len == JSON_ERROR_ILLEGAL_SYMBOL)
{
push_warning_printf(current_thd, Sql_condition::WARN_LEVEL_WARN,
ER_JSON_BAD_CHR, ER_THD(current_thd, ER_JSON_BAD_CHR),
0, "equality comparison", 0);
}
}
return 1;
}
value1.length(c_len);
res1= &value1;
}
Expand Down
4 changes: 2 additions & 2 deletions sql/item_strfunc.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5392,7 +5392,7 @@ String *Item_func_wsrep_last_written_gtid::val_str_ascii(String *str)
{
if (gtid_str.alloc(WSREP_MAX_WSREP_SERVER_GTID_STR_LEN+1))
{
my_error(ER_OUTOFMEMORY, MYF(0), WSREP_MAX_WSREP_SERVER_GTID_STR_LEN);
my_error(ER_OUTOFMEMORY, MYF(0), (size_t)WSREP_MAX_WSREP_SERVER_GTID_STR_LEN);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why? revert the whole file please.

null_value= TRUE;
return 0;
}
Expand All @@ -5417,7 +5417,7 @@ String *Item_func_wsrep_last_seen_gtid::val_str_ascii(String *str)
{
if (gtid_str.alloc(WSREP_MAX_WSREP_SERVER_GTID_STR_LEN+1))
{
my_error(ER_OUTOFMEMORY, MYF(0), WSREP_MAX_WSREP_SERVER_GTID_STR_LEN);
my_error(ER_OUTOFMEMORY, MYF(0), (size_t)WSREP_MAX_WSREP_SERVER_GTID_STR_LEN);
null_value= TRUE;
return 0;
}
Expand Down
2 changes: 1 addition & 1 deletion sql/session_tracker.cc
Original file line number Diff line number Diff line change
Expand Up @@ -578,7 +578,7 @@ bool sysvartrack_global_update(THD *thd, char *str, size_t len)
Session_sysvars_tracker::vars_list dummy;
DBUG_EXECUTE_IF("dbug_session_tracker_parse_error",
{
my_error(ER_OUTOFMEMORY, MYF(0), 1);
my_error(ER_OUTOFMEMORY, MYF(0), (size_t)1);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

revert the whole file please

return true;
});

Expand Down
6 changes: 3 additions & 3 deletions sql/set_var.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1424,7 +1424,7 @@ resolve_engine_list(THD *thd, const char *str_arg, size_t str_arg_len,
res= (plugin_ref *)my_malloc(PSI_INSTRUMENT_ME, (count+1)*sizeof(*res), MYF(MY_ZEROFILL|MY_WME));
if (!res)
{
my_error(ER_OUTOFMEMORY, MYF(0), (int)((count+1)*sizeof(*res)));
my_error(ER_OUTOFMEMORY, MYF(0), ((count+1)*sizeof(*res)));
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

revert the whole file please.

goto err;
}

Expand Down Expand Up @@ -1475,7 +1475,7 @@ copy_engine_list(plugin_ref *list)
p= (plugin_ref *)my_malloc(PSI_INSTRUMENT_ME, (count+1)*sizeof(*p), MYF(0));
if (!p)
{
my_error(ER_OUTOFMEMORY, MYF(0), (int)((count+1)*sizeof(*p)));
my_error(ER_OUTOFMEMORY, MYF(0), ((count+1)*sizeof(*p)));
return NULL;
}
for (i= 0; i < count; ++i)
Expand All @@ -1500,7 +1500,7 @@ temp_copy_engine_list(THD *thd, plugin_ref *list)
p= (plugin_ref *)thd->alloc((count+1)*sizeof(*p));
if (!p)
{
my_error(ER_OUTOFMEMORY, MYF(0), (int)((count+1)*sizeof(*p)));
my_error(ER_OUTOFMEMORY, MYF(0), ((count+1)*sizeof(*p)));
return NULL;
}
for (i= 0; i < count; ++i)
Expand Down
50 changes: 26 additions & 24 deletions sql/share/errmsg-utf8.txt
Original file line number Diff line number Diff line change
Expand Up @@ -887,30 +887,32 @@ ER_OPEN_AS_READONLY
swe "'%-.192s' är skyddad mot förändring"
ukr "Таблиця '%-.192s' тільки для читання"
ER_OUTOFMEMORY HY001 S1001
chi "内存不足; 重启后重试(需要 %d bytes)"
cze "Málo paměti. Přestartujte daemona a zkuste znovu (je potřeba %d bytů)"
dan "Ikke mere hukommelse. Genstart serveren og prøv igen (mangler %d bytes)"
eng "Out of memory; restart server and try again (needed %d bytes)"
est "Mälu sai otsa. Proovi MariaDB uuesti käivitada (puudu jäi %d baiti)"
fre "Manque de mémoire. Redémarrez le démon et ré-essayez (%d octets nécessaires)"
ger "Kein Speicher vorhanden (%d Bytes benötigt). Bitte Server neu starten"
greek "Δεν υπάρχει διαθέσιμη μνήμη. Προσπαθήστε πάλι, επανεκινώντας τη διαδικασία (demon) (χρειάζονται %d bytes)"
hun "Nincs eleg memoria. Inditsa ujra a demont, es probalja ismet. (%d byte szukseges.)"
ita "Memoria esaurita. Fai ripartire il demone e riprova (richiesti %d bytes)"
jpn "メモリが不足しています。サーバーを再起動してみてください。(%d バイトの割り当てに失敗)"
kor "Out of memory. 데몬을 재 실행 후 다시 시작하시오 (needed %d bytes)"
nla "Geen geheugen meer. Herstart server en probeer opnieuw (%d bytes nodig)"
nor "Ikke mer minne. Star på nytt tjenesten og prøv igjen (trengte %d byter)"
norwegian-ny "Ikkje meir minne. Start på nytt tenesten og prøv igjen (trengte %d bytar)"
pol "Zbyt mało pamięci. Uruchom ponownie demona i spróbuj ponownie (potrzeba %d bajtów)"
por "Sem memória. Reinicie o programa e tente novamente (necessita de %d bytes)"
rum "Out of memory. Porneste daemon-ul din nou si incearca inca o data (e nevoie de %d bytes)"
rus "Недостаточно памяти. Перезапустите сервер и попробуйте еще раз (нужно %d байт)"
serbian "Nema memorije. Restartujte MariaDB server i probajte ponovo (potrebno je %d byte-ova)"
slo "Málo pamäti. Reštartujte daemona a skúste znova (je potrebných %d bytov)"
spa "Memoria insuficiente. Reinicie el servidor e inténtelo otra vez (necesita %d bytes)"
swe "Oväntat slut på minnet, starta om programmet och försök på nytt (Behövde %d bytes)"
ukr "Брак пам'яті. Рестартуйте сервер та спробуйте знову (потрібно %d байтів)"
chi "内存不足; 重启后重试(需要 %zu bytes)"
cze "Málo paměti. Přestartujte daemona a zkuste znovu (je potřeba %zu bytů)"
dan "Ikke mere hukommelse. Genstart serveren og prøv igen (mangler %zu bytes)"
eng "Out of memory; restart server and try again (needed %zu bytes)"
est "Mälu sai otsa. Proovi MariaDB uuesti käivitada (puudu jäi %zu baiti)"
fre "Manque de mémoire. Redémarrez le démon et ré-essayez (%zu octets nécessaires)"
ger "Kein Speicher vorhanden (%zu Bytes benötigt). Bitte Server neu starten"
geo "არასაკმარისი მეხსიერება. გადატვირთეთ სერვერი და კიდევ სცადეთ (მჭირდებოდა %zu ბაიტი)"
greek "Δεν υπάρχει διαθέσιμη μνήμη. Προσπαθήστε πάλι, επανεκινώντας τη διαδικασία (demon) (χρειάζονται %zu bytes)"
hun "Nincs eleg memoria. Inditsa ujra a demont, es probalja ismet. (%zu byte szukseges.)"
ita "Memoria esaurita. Fai ripartire il demone e riprova (richiesti %zu bytes)"
jpn "メモリが不足しています。サーバーを再起動してみてください。(%zu バイトの割り当てに失敗)"
kor "Out of memory. 데몬을 재 실행 후 다시 시작하시오 (needed %zu bytes)"
nla "Geen geheugen meer. Herstart server en probeer opnieuw (%zu bytes nodig)"
nor "Ikke mer minne. Star på nytt tjenesten og prøv igjen (trengte %zu byter)"
norwegian-ny "Ikkje meir minne. Start på nytt tenesten og prøv igjen (trengte %zu bytar)"
pol "Zbyt mało pamięci. Uruchom ponownie demona i spróbuj ponownie (potrzeba %zu bajtów)"
por "Sem memória. Reinicie o programa e tente novamente (necessita de %zu bytes)"
rum "Out of memory. Porneste daemon-ul din nou si incearca inca o data (e nevoie de %zu bytes)"
rus "Недостаточно памяти. Перезапустите сервер и попробуйте еще раз (нужно %zu байт)"
serbian "Nema memorije. Restartujte MariaDB server i probajte ponovo (potrebno je %zu byte-ova)"
slo "Málo pamäti. Reštartujte daemona a skúste znova (je potrebných %zu bytov)"
spa "Memoria insuficiente. Reinicie el servidor e inténtelo otra vez (necesita %zu bytes)"
sw "Kumbukumbu imejaa; anzisha tena seva na ujaribu tena (inahitajika baiti %zu)"
swe "Oväntat slut på minnet, starta om programmet och försök på nytt (Behövde %zu bytes)"
ukr "Брак пам'яті. Рестартуйте сервер та спробуйте знову (потрібно %zu байтів)"
ER_OUT_OF_SORTMEMORY HY001 S1001
chi "排序内存不足,可以考虑增加实例排序缓存量"
cze "Málo paměti pro třídění. Zvyšte velikost třídícího bufferu"
Expand Down
2 changes: 1 addition & 1 deletion storage/columnstore/columnstore
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do not change submodules!

Submodule columnstore updated 9398 files
2 changes: 1 addition & 1 deletion storage/rocksdb/rocksdb
Submodule rocksdb updated 1236 files
2 changes: 1 addition & 1 deletion wsrep-lib