From 5fc802d376eebf188137a3f1f8af18da85d57bed Mon Sep 17 00:00:00 2001 From: Bradley Odell Date: Fri, 15 May 2020 03:30:12 -0700 Subject: [PATCH] fix: escape column comment in mysql driver (#6056) * Fixed bug with unescaped comment string in MySQL driver. * Added tests. * Fixed linting issue. --- src/driver/mysql/MysqlQueryRunner.ts | 2 +- test/github-issues/6066/entity/Session.ts | 11 +++++++++++ test/github-issues/6066/issue-6066.ts | 22 ++++++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 test/github-issues/6066/entity/Session.ts create mode 100644 test/github-issues/6066/issue-6066.ts diff --git a/src/driver/mysql/MysqlQueryRunner.ts b/src/driver/mysql/MysqlQueryRunner.ts index 67e2eea549..f501c899d8 100644 --- a/src/driver/mysql/MysqlQueryRunner.ts +++ b/src/driver/mysql/MysqlQueryRunner.ts @@ -1680,7 +1680,7 @@ export class MysqlQueryRunner extends BaseQueryRunner implements QueryRunner { if (column.isGenerated && column.generationStrategy === "increment") // don't use skipPrimary here since updates can update already exist primary without auto inc. c += " AUTO_INCREMENT"; if (column.comment) - c += ` COMMENT '${column.comment}'`; + c += ` COMMENT '${column.comment.replace("'", "''")}'`; if (column.default !== undefined && column.default !== null) c += ` DEFAULT ${column.default}`; if (column.onUpdate) diff --git a/test/github-issues/6066/entity/Session.ts b/test/github-issues/6066/entity/Session.ts new file mode 100644 index 0000000000..f75479a28f --- /dev/null +++ b/test/github-issues/6066/entity/Session.ts @@ -0,0 +1,11 @@ +import {Entity, PrimaryColumn} from "../../../../src"; + +@Entity() +export class Session { + + @PrimaryColumn({ + comment: "That's the way the cookie crumbles" + }) + cookie: string = ""; + +} diff --git a/test/github-issues/6066/issue-6066.ts b/test/github-issues/6066/issue-6066.ts new file mode 100644 index 0000000000..e855499c1b --- /dev/null +++ b/test/github-issues/6066/issue-6066.ts @@ -0,0 +1,22 @@ +import "reflect-metadata"; +import {createTestingConnections, closeTestingConnections} from "../../utils/test-utils"; +import {QueryFailedError, Connection} from "../../../src"; +import {Session} from "./entity/Session"; +import {expect} from "chai"; + +describe("github issues > #6066 Column comment string is not escaped during synchronization", () => { + + let connections: Connection[]; + before(async () => connections = await createTestingConnections({ + entities: [Session], + enabledDrivers: ["mysql", "mariadb"], + schemaCreate: false, + dropSchema: true, + })); + after(() => closeTestingConnections(connections)); + + it("should synchronize", () => Promise.all(connections.map(connection => { + return expect(connection.synchronize()).to.not.be.rejectedWith(QueryFailedError); + }))); + +});