Fix rare 1 byte buffer over-read

This commit is contained in:
Marvin W 2020-06-28 11:25:10 +02:00
parent 48964bc5cc
commit af98b8ea0f
No known key found for this signature in database
GPG key ID: 072E9235DB996F2A
2 changed files with 11 additions and 10 deletions

View file

@ -144,28 +144,29 @@ private static Key? get_key(string sig, bool priv) throws GLib.Error {
}
private static string get_string_from_data(Data data) {
const size_t BUF_SIZE = 256;
data.seek(0);
uint8[] buf = new uint8[256];
ssize_t? len = null;
uint8[] buf = new uint8[BUF_SIZE + 1];
ssize_t len = 0;
string res = "";
do {
len = data.read(buf);
len = data.read(buf, BUF_SIZE);
if (len > 0) {
string part = (string) buf;
part = part.substring(0, (long) len);
res += part;
buf[len] = 0;
res += (string) buf;
}
} while (len > 0);
return res;
}
private static uint8[] get_uint8_from_data(Data data) {
const size_t BUF_SIZE = 256;
data.seek(0);
uint8[] buf = new uint8[256];
ssize_t? len = null;
uint8[] buf = new uint8[BUF_SIZE + 1];
ssize_t len = 0;
ByteArray res = new ByteArray();
do {
len = data.read(buf);
len = data.read(buf, BUF_SIZE);
if (len > 0) {
res.append(buf[0:len]);
}

View file

@ -474,7 +474,7 @@ namespace GPG {
[CCode (cname = "gpgme_data_release_and_get_mem")]
public string release_and_get_mem(out size_t len);
public ssize_t read(uint8[] buf);
public ssize_t read([CCode (array_length = false)] uint8[] buf, size_t len);
public ssize_t write(uint8[] buf);