Ejemplo n.º 1
0
 /**
  * Display binary columns as hex string if requested
  * otherwise escape the contents using the best possible way
  *
  * @param string $content        String to parse
  * @param string $binary_or_blob binary' or 'blob'
  * @param int    $hexlength      optional, get substring
  *
  * @return String Displayable version of the binary string
  *
  * @access private
  *
  * @see    _getDataCellForGeometryColumns
  *         _getDataCellForNonNumericAndNonBlobColumns
  *         _handleNonPrintableContents
  */
 private function _displayBinaryAsPrintable($content, $binary_or_blob, $hexlength = null)
 {
     if ($binary_or_blob === 'binary' && $_SESSION['tmpval']['display_binary_as_hex']) {
         $content = bin2hex($content);
         if ($hexlength !== null) {
             $content = $GLOBALS['PMA_String']->substr($content, $hexlength);
         }
     } elseif (PMA_Util::containsNonPrintableAscii($content)) {
         if (PMA_PHP_INT_VERSION < 50400) {
             $content = htmlspecialchars(PMA_Util::replaceBinaryContents($content));
         } else {
             // The ENT_SUBSTITUTE option is available for PHP >= 5.4.0
             $content = htmlspecialchars(PMA_Util::replaceBinaryContents($content), ENT_SUBSTITUTE);
         }
     }
     return $content;
 }
 /**
  * replace binary contents test
  *
  * @param string $a String
  * @param string $e Expected output
  *
  * @return void
  *
  * @dataProvider replaceBinaryContentsDataProvider
  */
 public function testReplaceBinaryContents($a, $e)
 {
     $this->assertEquals($e, PMA_Util::replaceBinaryContents($a));
 }
 /**
  * Display binary fields as hex string for PHP <5.4, 
  * otherwise escape the contents if it may be displayed as hex
  *
  * @param string $content         String to parse
  * @param string $binary_or_blob  'binary' or 'blob'
  * @param int    $hexlength       optional, get substring
  *
  * @return Displayable version of the binary string
  *
  * @access private
  *
  * @see    _getDataCellForGeometryColumns
  *         _getDataCellForNonNumericAndNonBlobColumns
  *         _handleNonPrintableContents
  */
 private function _displayBinaryAsPrintable($content, $binary_or_blob, $hexlength = null)
 {
     if (PMA_PHP_INT_VERSION < 50400 || $binary_or_blob === 'binary' && $_SESSION['tmp_user_values']['display_binary_as_hex'] && PMA_Util::containsNonPrintableAscii($content)) {
         $content = bin2hex($content);
         if ($hexlength !== null) {
             $content = PMA_substr($content, $hexlength);
         }
     } else {
         $content = htmlspecialchars(PMA_Util::replaceBinaryContents($content), ENT_SUBSTITUTE);
     }
     return $content;
 }
Ejemplo n.º 4
0
/**
 * Prepares the field value and retrieve special chars, backup field and data array
 *
 * @param array   $current_row          a row of the table
 * @param array   $column               description of column in given table
 * @param array   $extracted_columnspec associative array containing type,
 *                                      spec_in_brackets and possibly
 *                                      enum_set_values (another array)
 * @param boolean $real_null_value      whether column value null or not null
 * @param array   $gis_data_types       list of GIS data types
 * @param string  $column_name_appendix string to append to column name in input
 *
 * @return array $real_null_value, $data, $special_chars, $backup_field,
 *               $special_chars_encoded
 */
function PMA_getSpecialCharsAndBackupFieldForExistingRow($current_row, $column, $extracted_columnspec, $real_null_value, $gis_data_types, $column_name_appendix)
{
    $special_chars_encoded = '';
    // (we are editing)
    if (is_null($current_row[$column['Field']])) {
        $real_null_value = true;
        $current_row[$column['Field']] = '';
        $special_chars = '';
        $data = $current_row[$column['Field']];
    } elseif ($column['True_Type'] == 'bit') {
        $special_chars = PMA_Util::printableBitValue($current_row[$column['Field']], $extracted_columnspec['spec_in_brackets']);
    } elseif (in_array($column['True_Type'], $gis_data_types)) {
        // Convert gis data to Well Know Text format
        $current_row[$column['Field']] = PMA_Util::asWKT($current_row[$column['Field']], true);
        $special_chars = htmlspecialchars($current_row[$column['Field']]);
    } else {
        // special binary "characters"
        if ($column['is_binary'] || $column['is_blob'] && !$GLOBALS['cfg']['ProtectBinary']) {
            if ($_SESSION['tmp_user_values']['display_binary_as_hex'] && $GLOBALS['cfg']['ShowFunctionFields']) {
                $current_row[$column['Field']] = bin2hex($current_row[$column['Field']]);
                $column['display_binary_as_hex'] = true;
            } else {
                $current_row[$column['Field']] = PMA_Util::replaceBinaryContents($current_row[$column['Field']]);
            }
        }
        // end if
        $special_chars = htmlspecialchars($current_row[$column['Field']]);
        //We need to duplicate the first \n or otherwise we will lose
        //the first newline entered in a VARCHAR or TEXT column
        $special_chars_encoded = PMA_Util::duplicateFirstNewline($special_chars);
        $data = $current_row[$column['Field']];
    }
    // end if... else...
    //when copying row, it is useful to empty auto-increment column
    // to prevent duplicate key error
    if (isset($_REQUEST['default_action']) && $_REQUEST['default_action'] === 'insert') {
        if ($column['Key'] === 'PRI' && strpos($column['Extra'], 'auto_increment') !== false) {
            $data = $special_chars_encoded = $special_chars = null;
        }
    }
    // If a timestamp field value is not included in an update
    // statement MySQL auto-update it to the current timestamp;
    // however, things have changed since MySQL 4.1, so
    // it's better to set a fields_prev in this situation
    $backup_field = '<input type="hidden" name="fields_prev' . $column_name_appendix . '" value="' . htmlspecialchars($current_row[$column['Field']]) . '" />';
    return array($real_null_value, $special_chars_encoded, $special_chars, $data, $backup_field);
}
Ejemplo n.º 5
0
 /**
  * Verifies what to do with non-printable contents (binary or BLOB)
  * in Browse mode.
  *
  * @param string $category              BLOB|BINARY|GEOMETRY
  * @param string $content               the binary content
  * @param string $transformation_plugin transformation plugin.
  *                                      Can also be the default function:
  *                                      PMA_mimeDefaultFunction
  * @param string $transform_options     transformation parameters
  * @param string $default_function      default transformation function
  * @param object $meta                  the meta-information about the field
  * @param array  $url_params            parameters that should go to the
  *                                      download link
  *
  * @return mixed  string or float
  *
  * @access  private
  *
  * @see     _getDataCellForBlobColumns(),
  *          _getDataCellForGeometryColumns(),
  *          _getDataCellForNonNumericAndNonBlobColumns(),
  *          _getSortedColumnMessage()
  */
 private function _handleNonPrintableContents($category, $content, $transformation_plugin, $transform_options, $default_function, $meta, $url_params = array())
 {
     $result = '[' . $category;
     if (is_null($content)) {
         $result .= ' - NULL';
         $size = 0;
     } elseif (isset($content)) {
         $size = strlen($content);
         $display_size = PMA_Util::formatByteDown($size, 3, 1);
         $result .= ' - ' . $display_size[0] . ' ' . $display_size[1];
     }
     $result .= ']';
     if (gettype($transformation_plugin) == "object" && strpos($transformation_plugin::getMIMESubtype(), 'Octetstream')) {
         $result = $content;
     }
     if ($size > 0) {
         if ($default_function != $transformation_plugin) {
             $result = $transformation_plugin->applyTransformation($result, $transform_options, $meta);
         } else {
             $result = $this->{$default_function}($result, array(), $meta);
             if (stristr($meta->type, self::BLOB_FIELD) && $_SESSION['tmp_user_values']['display_blob']) {
                 // in this case, restart from the original $content
                 $result = htmlspecialchars(PMA_Util::replaceBinaryContents($content));
             }
             /* Create link to download */
             if (count($url_params) > 0) {
                 $result = '<a href="tbl_get_field.php' . PMA_generate_common_url($url_params) . '">' . $result . '</a>';
             }
         }
     }
     return $result;
 }