BP_GOPP_Image_Editor_GS::gs_valid( string $file, bool $no_read_check = false )
Checks that file is local, doesn’t have a funny name and is a PDF.
Description
Parameters
- $file
-
(Required) File path.
- $no_read_check
-
(Optional) If true then doesn't open & read file to check existence and magic bytes.
Default value: false
Return
(bool|String) Returns true if valid; returns error message string if invalid.
Source
File: bp-document/classes/class-bp-gopp-image-editor-gs.php
protected static function gs_valid( $file, $no_read_check = false ) { // Loading from URL not currently supported. if ( preg_match( '|^https?://|', $file ) ) { return __( 'Loading from URL not supported.', 'buddyboss' ); } // Check filename can't be interpreted by Ghostscript as special - see https://ghostscript.com/doc/9.20/Use.htm#Options if ( preg_match( '/^[@|%-]/', $file ) ) { return __( 'Unsupported file name.', 'buddyboss' ); } // Check for suspect chars in base filename - same as $special_chars in sanitize_file_name() with ctrls, space and del added // but (for BC with common older uploads) with "+" removed - see #16226 for its addition (along with "%") Oct 2015. if ( preg_match( '/[?\[\]\/\\\\=<>:;,\'"&$#*()|~`!{}%\x00-\x20\x7f]/', wp_basename( $file ) ) ) { return __( 'Unsupported file name.', 'buddyboss' ); } if ( $no_read_check ) { return true; } // Check existence & magic bytes. $fp = @ fopen( $file, 'rb' ); if ( false === $fp ) { return __( 'File doesn’t exist?', 'buddyboss' ); } $magic_bytes = fread( $fp, 10 ); // Max 10 chars: "%PDF-N.NN" plus optional initial linefeed. fclose( $fp ); // This is a similar test to that done by libmagic, but more strict on version format by insisting it's "0." or "1." followed by 1 or 2 numbers. if ( ! preg_match( '/^\n?%PDF-[01]\.[0-9]{1,2}/', $magic_bytes ) ) { do_action( 'gopp_error', __CLASS__, __FUNCTION__, __LINE__, compact( 'file', 'magic_bytes' ) ); return __( 'File is not a PDF.', 'buddyboss' ); } return true; }
Changelog
Version | Description |
---|---|
BuddyBoss 1.4.0 | Introduced. |
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.