#include <iostream>
#include <string>
using namespace std;
class TaintedString : public string { using string:: string ; } ;
class BlessedString : public string { using string:: string ; } ;
BlessedString untaintString( TaintedString tstr) {
//do some sanitation or whatever is necessary
size_t pos;
while ( ( pos = tstr.find ( '\' ' ) ) ! = TaintedString:: npos ) {
tstr.erase ( pos) ;
}
return BlessedString( tstr.c_str ( ) ) ;
}
int main( ) {
TaintedString attack = "Mike\' ; DROP TABLE users;" ;
BlessedString bs = untaintString( attack) ;
//BlessedString test = attack; //compilation error
std:: cout << bs << "\n " ;
return 0 ;
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KICAgICNpbmNsdWRlIDxzdHJpbmc+CiAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOwogICAgIAogICAgY2xhc3MgVGFpbnRlZFN0cmluZyA6IHB1YmxpYyBzdHJpbmcge3VzaW5nIHN0cmluZzo6c3RyaW5nO307CiAgICBjbGFzcyBCbGVzc2VkU3RyaW5nIDogcHVibGljIHN0cmluZyB7dXNpbmcgc3RyaW5nOjpzdHJpbmc7fTsKICAgICAKICAgIEJsZXNzZWRTdHJpbmcgdW50YWludFN0cmluZyhUYWludGVkU3RyaW5nIHRzdHIpIHsKICAgIC8vZG8gc29tZSBzYW5pdGF0aW9uIG9yIHdoYXRldmVyIGlzIG5lY2Vzc2FyeQogICAgc2l6ZV90IHBvczsKICAgIHdoaWxlKChwb3MgPSB0c3RyLmZpbmQoJ1wnJykpICE9IFRhaW50ZWRTdHJpbmc6Om5wb3MpIHsKICAgIHRzdHIuZXJhc2UocG9zKTsKICAgIH0KICAgICAKICAgIHJldHVybiBCbGVzc2VkU3RyaW5nKHRzdHIuY19zdHIoKSk7CiAgICB9CiAgICAgCiAgICBpbnQgbWFpbigpIHsKICAgIFRhaW50ZWRTdHJpbmcgYXR0YWNrID0gIk1pa2VcJzsgRFJPUCBUQUJMRSB1c2VyczsiOwogICAgQmxlc3NlZFN0cmluZyBicyA9IHVudGFpbnRTdHJpbmcoYXR0YWNrKTsKICAgIAogICAgLy9CbGVzc2VkU3RyaW5nIHRlc3QgPSBhdHRhY2s7IC8vY29tcGlsYXRpb24gZXJyb3IKICAgIAogICAgc3RkOjpjb3V0IDw8IGJzIDw8ICJcbiI7CiAgICByZXR1cm4gMDsKICAgIH0=