-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Underscores are unnecessarily escaped in db_mysql #20153
Comments
|
* fixes #20153; do not escape `_` for mysql * add a test * Update db_mysql.nim * Update tdb_mysql.nim Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
…g#20164) * fixes nim-lang#20153; do not escape `_` for mysql * add a test * Update db_mysql.nim * Update tdb_mysql.nim Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* Improve error message for `strutils.addf` (#20157) Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com> * fixes #20153; do not escape `_` for mysql [backport] (#20164) * fixes #20153; do not escape `_` for mysql * add a test * Update db_mysql.nim * Update tdb_mysql.nim Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com> * [minor] don't find `"Hint: gc"` for action (#20170) * fixes links in the readme (#20167) * update the docs of arc following up #19749 (#19752) Co-authored-by: flywind <43030857+xflywind@users.noreply.github.com> * fixes broken ssl tests (#20181) * bootstrap the compiler with nimPreviewSlimSystem (#20176) * bootstrap the compiler with nimPreviewSlimSystem * threads * docs: fix some spelling errors (#19816) * docs: fix some spelling errors * contributing: fix spelling error Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com> * Update contributing.md * Update intern.md * Update manual.md * Update manual_experimental_strictnotnil.md * Update nimgrep_cmdline.txt * Update pegdocs.txt * Update testament.md * Update tut1.md Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com> Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com> * Build compiler with --noNimblePath (#20168) - Fixes #18840 * help our poor CI; don't run CI on other branches for push (#20184) * fix broken runnableExamples for getWeeksInIsoYear (#20193) Based on what I understand from [Wikipedia](https://en.wikipedia.org/wiki/ISO_week_date#Weeks_per_year), 2001 does not have 53 weeks, but 2004, 2009, 2015, 2020 do. The years 2000 and 2001 seem to be copy pasted from the `getDaysInYear` example above. The result of `getWeeksInIsoYear` also seem to match up with Wikipedia. That means these runnableExamples were never tested. Why is this the case? I only discovered this in #20091. * improve deprecation error messages (#20197) * Show beatutiful html instead of ugly markdown preview (#20196) * closes #6559; add testcase (#20200) * CI upgrade to ubuntu-20.04 (#20182) * CI upgrade to ubuntu-20.04 The ubuntu-18.04 environment is deprecated, consider switching to ubuntu-20.04(ubuntu-latest), or ubuntu-22.04 instead. For more details see actions/runner-images#6002 * Update azure-pipelines.yml * Markdown code blocks part 4 (#20189) No logic was added, just 8 more files have been migrated. * closes #15316; add testcase (#20213) * add version-1-6 and version-1-2 to triggered branches (#20214) * add version-1-6 and version-1-2 to triggered branches * Update .github/workflows/ci_packages.yml * use quote * closes #12955; add testcase (#20223) * add more Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com> Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com> Co-authored-by: flywind <43030857+xflywind@users.noreply.github.com> Co-authored-by: ee7 <45465154+ee7@users.noreply.github.com> Co-authored-by: Ivan Yonchovski <yyoncho@users.noreply.github.com> Co-authored-by: metagn <metagngn@gmail.com> Co-authored-by: Andrey Makarov <ph.makarov@gmail.com>
that's weird example for use case of |
As you pointed out, similar features in other languages are used for escaping parameters, not for escaping entire SQL statements, but there is a reason I mentioned the 'weird' example. The actual code of mine was as follows. Broken values got inserted when db.exec(sql"INSERT INTO files (hash, original_filepath, width, height) VALUES (?, ?, ?, ?)", hash, original_filepath, width, height) |
so % and _ should quote when use like, need revert the revert waiting for correct fix and correct the test file that's misleading users. |
I disagree with reverting this fix. If someone can implement Solution 1 correctly, I would welcome it (but I think it would be difficult), but Solution 2 recently made should not be reverted. Since By updating this library recently without realizing that the escaping of underscores had been added, I kept getting broken values inserted into my database. |
Or, |
that's may not difficult than you think , we have |
Am I missing something? In the following code, when the original_path has underscores in it, is there any way to correctly INSERT this value into the database even after reverting the fix?
|
so there's no worry about, we can detect like statement and decide whether quote |
I got it. I agree with you. |
* fixes #20153; do not escape `_` for mysql * add a test * Update db_mysql.nim * Update tdb_mysql.nim Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
…g#20164) * fixes nim-lang#20153; do not escape `_` for mysql * add a test * Update db_mysql.nim * Update tdb_mysql.nim Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
Architecture
No response
Operating System
No response
Disk
No response
Memory
No response
CPU Cores
No response
Internet Connection
No response
What is your web browser?
No response
Device
No response
What happened?
dbQuote() has been modified to escape special characters in #15234. Underscore(_) is a special character only in pattern-matching contexts for LIKE operator, so it should not be escaped anywhere else. Underscores in inserted values or expressions for WHERE clause without LIKE operator are unnecessarily escaped due to this bug.
https://dev.mysql.com/doc/refman/8.0/en/string-literals.html
Current Standard Output Logs
Expected Standard Output Logs
Possible Solution
For example, PHP does not seem to escape underscores.
https://www.php.net/manual/ja/mysqli.real-escape-string.php#46339
Additional Information
This issue could happen for percent signs (%), but it was fixed for percent sings in 8e181cb
The text was updated successfully, but these errors were encountered: