fix elyr buffer overflow, only escape if escape is necessary
This commit is contained in:
parent
0546ebb63d
commit
a77401ce6f
|
@ -93,19 +93,34 @@ empc_module_metadata_fetch(const Empc_Fetch_Request *req)
|
||||||
eq->req = (Empc_Fetch_Request*)req;
|
eq->req = (Empc_Fetch_Request*)req;
|
||||||
eq->ereqs = eina_list_append(eq->ereqs, ereq);
|
eq->ereqs = eina_list_append(eq->ereqs, ereq);
|
||||||
|
|
||||||
s = song = calloc(1, strlen(req->song) * 3);
|
/* lyricwiki's api is fucking terrible and has no ability to do fuzzy matching
|
||||||
|
* because of this, it is frequently the case that song titles which include '-'
|
||||||
|
* will match wrong due to the lack of surrounding spaces.
|
||||||
|
* in this block, I'll attempt the shotgun approach and try fetching with sequential
|
||||||
|
* '-' escapes
|
||||||
|
*/
|
||||||
|
s = song = calloc(1, (strlen(req->song) * 3) + 1);
|
||||||
for (p = req->song; p[0]; p++, s++)
|
for (p = req->song; p[0]; p++, s++)
|
||||||
{
|
{
|
||||||
if (p[0] == '-')
|
Eina_Bool rep = EINA_FALSE;
|
||||||
|
|
||||||
|
if ((p - req->song > 0) && (p[0] == '-') && (p[-1] != ' ') && (p[-1] != '_'))
|
||||||
{
|
{
|
||||||
s[0] = '_';
|
s[0] = '_';
|
||||||
s++;
|
s++;
|
||||||
|
rep = EINA_TRUE;
|
||||||
}
|
}
|
||||||
s[0] = p[0];
|
s[0] = p[0];
|
||||||
if (p[0] == '-')
|
if (p[0] == '-')
|
||||||
{
|
{
|
||||||
s++;
|
|
||||||
s[0] = '_';
|
if ((p[1] != ' ') && (p[1] != '_'))
|
||||||
|
{
|
||||||
|
rep = EINA_TRUE;
|
||||||
|
s++;
|
||||||
|
s[0] = '_';
|
||||||
|
}
|
||||||
|
if (!rep) continue;
|
||||||
strcpy(s + 1, p + 1);
|
strcpy(s + 1, p + 1);
|
||||||
ereq = excetra_req_new(req->artist, song, (Excetra_Result_Cb)result_cb, eq);
|
ereq = excetra_req_new(req->artist, song, (Excetra_Result_Cb)result_cb, eq);
|
||||||
if (ereq)
|
if (ereq)
|
||||||
|
|
Loading…
Reference in New Issue