Skip to content

Commit d9e19b6

Browse files
committed
Update to remove null byte before saving to DB and remove null byte on changes
1 parent c3a96ff commit d9e19b6

4 files changed

Lines changed: 42 additions & 7 deletions

File tree

lib/models/index.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ if (config.dburl)
2020
else
2121
sequelize = new Sequelize(dbconfig.database, dbconfig.username, dbconfig.password, dbconfig);
2222

23+
// [Postgres] Handling NULL bytes
24+
// https://github.com/sequelize/sequelize/issues/6485
25+
function stripNullByte(value) {
26+
return value ? value.replace(/\u0000/g, "") : value;
27+
}
28+
sequelize.stripNullByte = stripNullByte;
29+
2330
var db = {};
2431

2532
fs

lib/models/note.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,22 @@ module.exports = function (sequelize, DataTypes) {
5252
defaultValue: 0
5353
},
5454
title: {
55-
type: DataTypes.TEXT
55+
type: DataTypes.TEXT,
56+
set: function (value) {
57+
this.setDataValue('title', sequelize.stripNullByte(value));
58+
}
5659
},
5760
content: {
58-
type: DataTypes.TEXT
61+
type: DataTypes.TEXT,
62+
set: function (value) {
63+
this.setDataValue('content', sequelize.stripNullByte(value));
64+
}
5965
},
6066
authorship: {
61-
type: DataTypes.TEXT
67+
type: DataTypes.TEXT,
68+
set: function (value) {
69+
this.setDataValue('authorship', JSON.stringify(value));
70+
}
6271
},
6372
lastchangeAt: {
6473
type: DataTypes.DATE

lib/models/revision.js

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,19 +59,31 @@ module.exports = function (sequelize, DataTypes) {
5959
defaultValue: Sequelize.UUIDV4
6060
},
6161
patch: {
62-
type: DataTypes.TEXT
62+
type: DataTypes.TEXT,
63+
set: function (value) {
64+
this.setDataValue('patch', sequelize.stripNullByte(value));
65+
}
6366
},
6467
lastContent: {
65-
type: DataTypes.TEXT
68+
type: DataTypes.TEXT,
69+
set: function (value) {
70+
this.setDataValue('lastContent', sequelize.stripNullByte(value));
71+
}
6672
},
6773
content: {
68-
type: DataTypes.TEXT
74+
type: DataTypes.TEXT,
75+
set: function (value) {
76+
this.setDataValue('content', sequelize.stripNullByte(value));
77+
}
6978
},
7079
length: {
7180
type: DataTypes.INTEGER
7281
},
7382
authorship: {
74-
type: DataTypes.TEXT
83+
type: DataTypes.TEXT,
84+
set: function (value) {
85+
this.setDataValue('authorship', value ? JSON.stringify(value) : value);
86+
}
7587
}
7688
}, {
7789
classMethods: {

public/js/index.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3207,6 +3207,12 @@ function buildCursor(user) {
32073207
}
32083208

32093209
//editor actions
3210+
function removeNullByte(cm, change) {
3211+
var str = change.text.join("\n");
3212+
if (/\u0000/g.test(str) && change.update) {
3213+
change.update(change.from, change.to, str.replace(/\u0000/g, "").split("\n"));
3214+
}
3215+
}
32103216
function enforceMaxLength(cm, change) {
32113217
var maxLength = cm.getOption("maxLength");
32123218
if (maxLength && change.update) {
@@ -3228,6 +3234,7 @@ var ignoreEmitEvents = ['setValue', 'ignoreHistory'];
32283234
editor.on('beforeChange', function (cm, change) {
32293235
if (debug)
32303236
console.debug(change);
3237+
removeNullByte(cm, change);
32313238
if (enforceMaxLength(cm, change)) {
32323239
$('.limit-modal').modal('show');
32333240
}

0 commit comments

Comments
 (0)