snipe / snipe-it

A free open source IT asset/license management system
https://snipeitapp.com
GNU Affero General Public License v3.0
10.88k stars 3.14k forks source link

Server Error, TypeError when accessing API #12087

Open w4itey opened 1 year ago

w4itey commented 1 year ago

Debug mode

Describe the bug

When trying to make an api call to /hardware/byserial/:serial I receive a TypeError htmlspecialchars(): Argument #1 ($string) must be of type string, array given

Reproduction steps

  1. make a GET request to /hardware/byserial/:serial api endpoint
  2. returns Server Error Message

Expected behavior

receive a json object with asset information

Screenshots

No response

Snipe-IT Version

v6.0.13 build 8923 (g30f4af3ac)

Operating System

Windows Server 2019

Web Server

IIS

PHP Version

8.1.12

Operating System

Windows

Browser

powershell

Version

No response

Device

No response

Operating System

No response

Browser

No response

Version

No response

Error messages

"message": "htmlspecialchars(): Argument #1 ($string) must be of type string, array given",
    "exception": "TypeError",
    "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Support\\helpers.php",
    "line": 118,
    "trace": [
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Support\\helpers.php",
            "line": 118,
            "function": "htmlspecialchars"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\app\\Http\\Transformers\\AssetsTransformer.php",
            "line": 111,
            "function": "e"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\app\\Http\\Transformers\\AssetsTransformer.php",
            "line": 17,
            "function": "transformAsset",
            "class": "App\\Http\\Transformers\\AssetsTransformer",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\app\\Http\\Controllers\\Api\\AssetsController.php",
            "line": 389,
            "function": "transformAssets",
            "class": "App\\Http\\Transformers\\AssetsTransformer",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Controller.php",
            "line": 54,
            "function": "showBySerial",
            "class": "App\\Http\\Controllers\\Api\\AssetsController",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\ControllerDispatcher.php",
            "line": 45,
            "function": "callAction",
            "class": "Illuminate\\Routing\\Controller",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Route.php",
            "line": 262,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\ControllerDispatcher",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Route.php",
            "line": 205,
            "function": "runController",
            "class": "Illuminate\\Routing\\Route",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php",
            "line": 721,
            "function": "run",
            "class": "Illuminate\\Routing\\Route",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
            "line": 128,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Middleware\\ThrottleRequests.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Middleware\\ThrottleRequests.php",
            "line": 103,
            "function": "handleRequest",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Middleware\\ThrottleRequests.php",
            "line": 55,
            "function": "handleRequestUsingNamedLimiter",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Auth\\Middleware\\Authenticate.php",
            "line": 44,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
            "line": 103,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php",
            "line": 723,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php",
            "line": 698,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php",
            "line": 662,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php",
            "line": 651,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php",
            "line": 167,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
            "line": 128,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\livewire\\livewire\\src\\DisableBrowserCache.php",
            "line": 19,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Livewire\\DisableBrowserCache",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\barryvdh\\laravel-debugbar\\src\\Middleware\\InjectDebugbar.php",
            "line": 66,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Barryvdh\\Debugbar\\Middleware\\InjectDebugbar",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\fruitcake\\laravel-cors\\src\\HandleCors.php",
            "line": 52,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Fruitcake\\Cors\\HandleCors",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\app\\Http\\Middleware\\PreventBackHistory.php",
            "line": 23,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "App\\Http\\Middleware\\PreventBackHistory",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\app\\Http\\Middleware\\SecurityHeaders.php",
            "line": 26,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "App\\Http\\Middleware\\SecurityHeaders",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\app\\Http\\Middleware\\CheckForDebug.php",
            "line": 25,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "App\\Http\\Middleware\\CheckForDebug",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\app\\Http\\Middleware\\CheckForSetup.php",
            "line": 25,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "App\\Http\\Middleware\\CheckForSetup",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\fideloper\\proxy\\src\\TrustProxies.php",
            "line": 57,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Fideloper\\Proxy\\TrustProxies",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\View\\Middleware\\ShareErrorsFromSession.php",
            "line": 49,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Illuminate\\View\\Middleware\\ShareErrorsFromSession",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Session\\Middleware\\StartSession.php",
            "line": 121,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Session\\Middleware\\StartSession.php",
            "line": 64,
            "function": "handleStatefulRequest",
            "class": "Illuminate\\Session\\Middleware\\StartSession",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Illuminate\\Session\\Middleware\\StartSession",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance.php",
            "line": 86,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\app\\Http\\Middleware\\NoSessionStore.php",
            "line": 28,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "App\\Http\\Middleware\\NoSessionStore",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
            "line": 103,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php",
            "line": 142,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php",
            "line": 111,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "C:\\inetpub\\wwwroot\\snipe-it\\public\\index.php",
            "line": 52,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        }
    ]
}

Additional context

No response

welcome[bot] commented 1 year ago

👋 Thanks for opening your first issue here! If you're reporting a 🐞 bug, please make sure you include steps to reproduce it. We get a lot of issues on this repo, so please be patient and we will get back to you as soon as we can.

w4itey commented 1 year ago

this seems to be an issue with that user

w4itey commented 1 year ago

When trying to view the users assets i get LOG.error htmlspecialchars(): Argument #1 ($string) must be of type string, array given {"userID":1,"exception":{}}

w4itey commented 1 year ago

It appears when you use the API to set a field for an asset that starts and ends with {} then SnipeIT considers it an Array and errors out on the device.

w4itey commented 1 year ago

Well, if anyone is curious, when doing a PATCH api request, if you upload an array SnipeIT does not normalize the data, this causes the system to error out with the above error when accessing the item either via the website or the api. I was able to fix this by doing another PATCH request and blanking out the data.