wp-includes/ID3/getid3.php:2435$namestring$offsetint$lengthint$image_mimestringoptionalnullstring|null public function saveAttachment($name, $offset, $length, $image_mime=null) { $fp_dest = null; $dest = null; try { // do not extract at all if ($this->getid3->option_save_attachments === getID3::ATTACHMENTS_NONE) { $attachment = null; // do not set any // extract to return array } elseif ($this->getid3->option_save_attachments === getID3::ATTACHMENTS_INLINE) { $this->fseek($offset); $attachment = $this->fread($length); // get whole data in one pass, till it is anyway stored in memory if ($attachment === false || strlen($attachment) != $length) { throw new Exception('failed to read attachment data'); } // assume directory path is given } else { // set up destination path $dir = rtrim(str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $this->getid3->option_save_attachments), DIRECTORY_SEPARATOR); if (!is_dir($dir) || !getID3::is_writable($dir)) { // check supplied directory throw new Exception('supplied path ('.$dir.') does not exist, or is not writable'); } $dest = $dir.DIRECTORY_SEPARATOR.$name.($image_mime ? '.'.getid3_lib::ImageExtFromMime($image_mime) : ''); // create dest file if (($fp_dest = fopen($dest, 'wb')) == false) { throw new Exception('failed to create file '.$dest); } // copy data $this->fseek($offset); $buffersize = ($this->data_string_flag ? $length : $this->getid3->fread_buffer_size()); $bytesleft = $length; while ($bytesleft > 0) { if (($buffer = $this->fread(min($buffersize, $bytesleft))) === false || ($byteswritten = fwrite($fp_dest, $buffer)) === false || ($byteswritten === 0)) { throw new Exception($buffer === false ? 'not enough data to read' : 'failed to write to destination file, may be not enough disk space'); } $bytesleft -= $byteswritten; } fclose($fp_dest); $attachment = $dest; } } catch (Exception $e) { // close and remove dest file if created if (isset($fp_dest) && is_resource($fp_dest)) { fclose($fp_dest); } if (isset($dest) && file_exists($dest)) { unlink($dest); } // do not set any is case of error $attachment = null; $this->warning('Failed to extract attachment '.$name.': '.$e->getMessage()); } // seek to the end of attachment $this->fseek($offset + $length); return $attachment; }Unchanged from 6.7.7 through 7.1.0.
Signature, return type and hooks compared across 5 parsed releases.
src/wp-includes/ID3/getid3.php, and regenerated for each WordPress release so it tracks the code rather than a snapshot of it.