Skip to content

Commit

Permalink
feat: isValidImage gif validation
Browse files Browse the repository at this point in the history
  • Loading branch information
gabriel-logan committed May 21, 2024
1 parent fb02ce3 commit adf4f9d
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 2 deletions.
2 changes: 1 addition & 1 deletion packages/typescript/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "multiform-validator",
"version": "2.0.3",
"version": "2.0.4",
"description": "Javascript library made to validate, several form fields, such as: email, phone, password, cpf etc.",
"main": "./dist/index.js",
"types": "./types/index.d.ts",
Expand Down
9 changes: 8 additions & 1 deletion packages/typescript/src/isValidImage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,20 @@ function isValidImage(fileBuffer: Buffer): boolean {
// Check magic numbers to determine the mimetype
const isJpeg: boolean =
fileBuffer[0] === 0xff && fileBuffer[1] === 0xd8 && fileBuffer[2] === 0xff;

const isPng: boolean =
fileBuffer[0] === 0x89 &&
fileBuffer[1] === 0x50 &&
fileBuffer[2] === 0x4e &&
fileBuffer[3] === 0x47;

return isJpeg || isPng;
const isGif: boolean =
fileBuffer[0] == 0x47 &&
fileBuffer[1] == 0x49 &&
fileBuffer[2] == 0x46 &&
fileBuffer[3] == 0x38;

return isJpeg || isPng || isGif;
}

export default isValidImage;
30 changes: 30 additions & 0 deletions packages/typescript/tests/src/isValidImage.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,35 @@ describe('isValidImage', () => {
const result = isValidImage(fileBuffer);
expect(result).toBe(false);
});

it('should return false for a GIF image', () => {
const fileBuffer = Buffer.from([0x47, 0x49, 0x46, 0x38, /* ... */]);
const result = isValidImage(fileBuffer);
expect(result).toBe(true);
});

it('should return false for an empty buffer', () => {
const fileBuffer = Buffer.from([]);
const result = isValidImage(fileBuffer);
expect(result).toBe(false);
});

it('should return false for a buffer with less than 4 bytes', () => {
const fileBuffer = Buffer.from([0x47, 0x49, 0x46]);
const result = isValidImage(fileBuffer);
expect(result).toBe(false);
});

it('should return false for a buffer with less than 3 bytes', () => {
const fileBuffer = Buffer.from([0x47, 0x49]);
const result = isValidImage(fileBuffer);
expect(result).toBe(false);
});

it('should return false for a buffer with less than 2 bytes', () => {
const fileBuffer = Buffer.from([0x47]);
const result = isValidImage(fileBuffer);
expect(result).toBe(false);
});
});
export default isValidImage;

0 comments on commit adf4f9d

Please sign in to comment.