comparison Framework/MySQL/MySQLDatabase.cpp @ 60:412e30336847

allowing dollars and underscores in MySQL database identifiers
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 19 Nov 2018 15:06:08 +0100
parents 6a574d810b98
children 714c5d2bee76
comparison
equal deleted inserted replaced
59:318c1ccb787c 60:412e30336847
326 if (mysql_ == NULL) 326 if (mysql_ == NULL)
327 { 327 {
328 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); 328 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
329 } 329 }
330 330
331 if (!IsAlphanumericString(name)) 331 if (!IsValidDatabaseIdentifier(name))
332 { 332 {
333 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); 333 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
334 } 334 }
335 335
336 Query query("SELECT COUNT(*) FROM information_schema.TABLES WHERE " 336 Query query("SELECT COUNT(*) FROM information_schema.TABLES WHERE "
358 if (mysql_ == NULL) 358 if (mysql_ == NULL)
359 { 359 {
360 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); 360 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
361 } 361 }
362 362
363 if (!IsAlphanumericString(name)) 363 if (!IsValidDatabaseIdentifier(name))
364 { 364 {
365 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); 365 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
366 } 366 }
367 367
368 Query query("SELECT COUNT(*) FROM information_schema.SCHEMATA " 368 Query query("SELECT COUNT(*) FROM information_schema.SCHEMATA "
478 { 478 {
479 mysql_library_end(); 479 mysql_library_end();
480 } 480 }
481 481
482 482
483 bool MySQLDatabase::IsAlphanumericString(const std::string& s) 483 bool MySQLDatabase::IsValidDatabaseIdentifier(const std::string& s)
484 { 484 {
485 for (size_t i = 0; i < s.length(); i++) 485 for (size_t i = 0; i < s.length(); i++)
486 { 486 {
487 if (!isalnum(s[i])) 487 // https://dev.mysql.com/doc/refman/8.0/en/identifiers.html
488 if (!isalnum(s[i]) &&
489 s[i] != '$' &&
490 s[i] != '_')
488 { 491 {
489 return false; 492 return false;
490 } 493 }
491 } 494 }
492 495