From 0664f9ed2b21902a2592d712029807ca82791714 Mon Sep 17 00:00:00 2001 From: unK Date: Sun, 14 Sep 2008 19:41:33 +0200 Subject: [PATCH] escape html chars in fetched lyrics properly --- src/lyrics.cpp | 37 +++++++++++++++++-------------------- src/lyrics.h | 1 + 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/src/lyrics.cpp b/src/lyrics.cpp index c15cbcf3..bdb9c722 100644 --- a/src/lyrics.cpp +++ b/src/lyrics.cpp @@ -34,6 +34,21 @@ size_t write_data(char *buffer, size_t size, size_t nmemb, string data) return result; } +void EscapeHtml(string &str) +{ + for (int i = str.find("<"); i != string::npos; i = str.find("<")) + { + int j = str.find(">")+1; + str.replace(i, j-i, ""); + } + for (int i = str.find("'"); i != string::npos; i = str.find("'")) + str.replace(i, 6, "'"); + for (int i = str.find("""); i != string::npos; i = str.find(""")) + str.replace(i, 6, "\""); + for (int i = str.find("&"); i != string::npos; i = str.find("&")) + str.replace(i, 6, "&"); +} + string GetLyrics(string artist, string song) { const string filename = artist + " - " + song + ".txt"; @@ -87,30 +102,12 @@ string GetLyrics(string artist, string song) if (result == "Not found") return result; - for (int i = result.find("'"); i != string::npos; i = result.find("'")) - result.replace(i, 6, "'"); - for (int i = result.find("""); i != string::npos; i = result.find(""")) - result.replace(i, 6, "\""); for (int i = result.find("<"); i != string::npos; i = result.find("<")) result.replace(i, 4, "<"); for (int i = result.find(">"); i != string::npos; i = result.find(">")) result.replace(i, 4, ">"); - for (int i = result.find(""); i != string::npos; i = result.find("")) - result.replace(i, 7, ""); - for (int i = result.find(""); i != string::npos; i = result.find("")) - result.replace(i, 8, ""); - for (int i = result.find(""); i != string::npos; i = result.find("")) - result.replace(i, 8, ""); - for (int i = result.find(""); i != string::npos; i = result.find("")) - result.replace(i, 9, ""); - for (int i = result.find(""); i != string::npos; i = result.find("")) - result.replace(i, 3, ""); - for (int i = result.find(""); i != string::npos; i = result.find("")) - result.replace(i, 4, ""); - for (int i = result.find(""); i != string::npos; i = result.find("")) - result.replace(i, 3, ""); - for (int i = result.find(""); i != string::npos; i = result.find("")) - result.replace(i, 4, ""); + + EscapeHtml(result); std::ofstream output(fullpath.c_str()); diff --git a/src/lyrics.h b/src/lyrics.h index 6a4008d8..5ae8ce9d 100644 --- a/src/lyrics.h +++ b/src/lyrics.h @@ -28,6 +28,7 @@ # include "curl/curl.h" #endif +void EscapeHtml(string &); string GetLyrics(string, string); #endif