snipe / snipe-it

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

Adding a URL to a manufacturer does not work #7355

Closed barkermn01 closed 5 years ago

barkermn01 commented 5 years ago

Please confirm you have done the following before posting your bug report:

Describe the bug Try adding a manufacturer with a web address, it fails with a preg_match failure

To Reproduce Steps to reproduce the behavior:

  1. Go to 'settings > manufactures'
  2. Click on 'Create new'
  3. Fill out the Form, E.G Name: 'TP-Link' URL: 'https://www.tp-link.com/uk/'
  4. Click 'Save'
  5. See error

Expected behavior Expect the manufacture to be added

Screenshots Form Filledout Form Submited - Error

Server (please complete the following information):

Desktop (please complete the following information):

Error Messages

(1/1) ErrorExceptionpreg_match(): Compilation failed: invalid range in character class at offset 1825

in ValidatesAttributes.php line 1356 at HandleExceptions->handleError(2, 'preg_match(): Compilation failed: invalid range in character class at offset 1825', 'C:\inetpub\wwwroot\snipe-it\vendor\laravel\framework\src\Illuminate\Validation\Concerns\ValidatesAttributes.php', 1356, array('attribute' => 'url', 'value' => 'https://www.tp-link.com/uk/', 'pattern' => '~^ ((aaa|aaas|about|acap|acct|acr|adiumxtra|afp|afs|aim|apt|attachment|aw|barion|beshare|bitcoin|blob|bolo|callto|cap|chrome|chrome-extension|cid|coap|coaps|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-playcontainer|dlna-playsingle|dns|dntp|dtn|dvb|ed2k|example|facetime|fax|feed|feedready|file|filesystem|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|ham|hcp|http|https|iax|icap|icon|im|imap|info|iotdisco|ipn|ipp|ipps|irc|irc6|ircs|iris|iris.beep|iris.lwz|iris.xpc|iris.xpcs|itms|jabber|jar|jms|keyparc|lastfm|ldap|ldaps|magnet|mailserver|mailto|maps|market|message|mid|mms|modem|ms-help|ms-settings|ms-settings-airplanemode|ms-settings-bluetooth|ms-settings-camera|ms-settings-cellular|ms-settings-cloudstorage|ms-settings-emailandaccounts|ms-settings-language|ms-settings-location|ms-settings-lock|ms-settings-nfctransactions|ms-settings-notifications|ms-settings-power|ms-settings-privacy|ms-settings-proximity|ms-settings-screenrotation|ms-settings-wifi|ms-settings-workplace|msnim|msrp|msrps|mtqp|mumble|mupdate|mvn|news|nfs|ni|nih|nntp|notes|oid|opaquelocktoken|pack|palm|paparazzi|pkcs11|platform|pop|pres|prospero|proxy|psyc|query|redis|rediss|reload|res|resource|rmi|rsync|rtmfp|rtmp|rtsp|rtsps|rtspu|secondlife|service|session|sftp|sgn|shttp|sieve|sip|sips|skype|smb|sms|smtp|snews|snmp|soap.beep|soap.beeps|soldat|spotify|ssh|steam|stun|stuns|submit|svn|tag|teamspeak|tel|teliaeid|telnet|tftp|things|thismessage|tip|tn3270|turn|turns|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|videotex|view-source|wais|webcal|ws|wss|wtai|wyciwyg|xcon|xcon-userid|xfire|xmlrpc\.beep|xmlrpc.beeps|xmpp|xri|ymsgr|z39\.50|z39\.50r|z39\.50s)):// # protocol (([\pL\pN-]+:)?([\pL\pN-]+)@)? # basic auth ( ([\pL\pN\pS-\.])+(\.?([\pL]|xn\-\-[\pL\pN-]+)+\.?) # a domain name | # or \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} # an IP address | # or \[ (?:(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){6})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:::(?:(?:(?:[0-9a-f]{1,4})):){5})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){4})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,1}(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){3})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,2}(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){2})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,3}(?:(?:[0-9a-f]{1,4})))?::(?:(?:[0-9a-f]{1,4})):)(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,4}(?:(?:[0-9a-f]{1,4})))?::)(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,5}(?:(?:[0-9a-f]{1,4})))?::)(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,6}(?:(?:[0-9a-f]{1,4})))?::)))) \] # an IPv6 address ) (:[0-9]+)? # a port (optional) (/?|/\S+|\?\S|\#\S) # a /, nothing, a / with something, a query or a fragment $~ixu')) at preg_match('~^ ((aaa|aaas|about|acap|acct|acr|adiumxtra|afp|afs|aim|apt|attachment|aw|barion|beshare|bitcoin|blob|bolo|callto|cap|chrome|chrome-extension|cid|coap|coaps|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-playcontainer|dlna-playsingle|dns|dntp|dtn|dvb|ed2k|example|facetime|fax|feed|feedready|file|filesystem|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|ham|hcp|http|https|iax|icap|icon|im|imap|info|iotdisco|ipn|ipp|ipps|irc|irc6|ircs|iris|iris.beep|iris.lwz|iris.xpc|iris.xpcs|itms|jabber|jar|jms|keyparc|lastfm|ldap|ldaps|magnet|mailserver|mailto|maps|market|message|mid|mms|modem|ms-help|ms-settings|ms-settings-airplanemode|ms-settings-bluetooth|ms-settings-camera|ms-settings-cellular|ms-settings-cloudstorage|ms-settings-emailandaccounts|ms-settings-language|ms-settings-location|ms-settings-lock|ms-settings-nfctransactions|ms-settings-notifications|ms-settings-power|ms-settings-privacy|ms-settings-proximity|ms-settings-screenrotation|ms-settings-wifi|ms-settings-workplace|msnim|msrp|msrps|mtqp|mumble|mupdate|mvn|news|nfs|ni|nih|nntp|notes|oid|opaquelocktoken|pack|palm|paparazzi|pkcs11|platform|pop|pres|prospero|proxy|psyc|query|redis|rediss|reload|res|resource|rmi|rsync|rtmfp|rtmp|rtsp|rtsps|rtspu|secondlife|service|session|sftp|sgn|shttp|sieve|sip|sips|skype|smb|sms|smtp|snews|snmp|soap.beep|soap.beeps|soldat|spotify|ssh|steam|stun|stuns|submit|svn|tag|teamspeak|tel|teliaeid|telnet|tftp|things|thismessage|tip|tn3270|turn|turns|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|videotex|view-source|wais|webcal|ws|wss|wtai|wyciwyg|xcon|xcon-userid|xfire|xmlrpc\.beep|xmlrpc.beeps|xmpp|xri|ymsgr|z39\.50|z39\.50r|z39\.50s)):// # protocol (([\pL\pN-]+:)?([\pL\pN-]+)@)? # basic auth ( ([\pL\pN\pS-\.])+(\.?([\pL]|xn\-\-[\pL\pN-]+)+\.?) # a domain name | # or \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} # an IP address | # or \[ (?:(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){6})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:::(?:(?:(?:[0-9a-f]{1,4})):){5})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){4})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,1}(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){3})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,2}(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){2})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,3}(?:(?:[0-9a-f]{1,4})))?::(?:(?:[0-9a-f]{1,4})):)(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,4}(?:(?:[0-9a-f]{1,4})))?::)(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,5}(?:(?:[0-9a-f]{1,4})))?::)(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,6}(?:(?:[0-9a-f]{1,4})))?::)))) \] # an IPv6 address ) (:[0-9]+)? # a port (optional) (/?|/\S+|\?\S|\#\S) # a /, nothing, a / with something, a query or a fragment $~ixu', 'https://www.tp-link.com/uk/')in ValidatesAttributes.php line 1356 at Validator->validateUrl('url', 'https://www.tp-link.com/uk/', array(), object(Validator))in Validator.php line 352 at Validator->validateAttribute('url', 'Url')in Validator.php line 267 at Validator->passes()in ValidatingTrait.php line 420 at Manufacturer->performValidation(array('name' => 'required|min:2|max:255|unique:manufacturers,name,NULL,deleted_at', 'url' => 'url|nullable', 'support_url' => 'url|nullable', 'support_email' => 'email|nullable'))in ValidatingTrait.php line 273 at Manufacturer->isValid()in ValidatingObserver.php line 51 at ValidatingObserver->performValidation(object(Manufacturer), 'saving')in ValidatingObserver.php line 20 at ValidatingObserver->saving(object(Manufacturer)) at call_user_func_array(array(object(ValidatingObserver), 'saving'), array(object(Manufacturer)))in Dispatcher.php line 367 at Dispatcher->Illuminate\Events{closure}('eloquent.saving: App\Models\Manufacturer', array(object(Manufacturer)))in Dispatcher.php line 199 at Dispatcher->dispatch('eloquent.saving: App\Models\Manufacturer', array(object(Manufacturer)), true)in Dispatcher.php line 159 at Dispatcher->until('eloquent.saving: App\Models\Manufacturer', object(Manufacturer))in HasEvents.php line 148 at Model->fireModelEvent('saving')in Model.php line 506 at Model->save()in ManufacturersController.php line 93 at ManufacturersController->store(object(ImageUploadRequest)) at call_user_func_array(array(object(ManufacturersController), 'store'), array(object(ImageUploadRequest)))in Controller.php line 55 at Controller->callAction('store', array(object(ImageUploadRequest)))in ControllerDispatcher.php line 44 at ControllerDispatcher->dispatch(object(Route), object(ManufacturersController), 'store')in Route.php line 203 at Route->runController()in Route.php line 160 at Route->run()in Router.php line 572 at Router->Illuminate\Routing{closure}(object(Request))in Pipeline.php line 30 at Pipeline->Illuminate\Routing{closure}(object(Request))in Authenticate.php line 43 at Authenticate->handle(object(Request), object(Closure))in Pipeline.php line 148 at Pipeline->Illuminate\Pipeline{closure}(object(Request))in Pipeline.php line 53 at Pipeline->Illuminate\Routing{closure}(object(Request))in CreateFreshApiToken.php line 49 at CreateFreshApiToken->handle(object(Request), object(Closure))in Pipeline.php line 148 at Pipeline->Illuminate\Pipeline{closure}(object(Request))in Pipeline.php line 53 at Pipeline->Illuminate\Routing{closure}(object(Request))in CheckForTwoFactor.php line 49 at CheckForTwoFactor->handle(object(Request), object(Closure))in Pipeline.php line 148 at Pipeline->Illuminate\Pipeline{closure}(object(Request))in Pipeline.php line 53 at Pipeline->Illuminate\Routing{closure}(object(Request))in CheckLocale.php line 42 at CheckLocale->handle(object(Request), object(Closure))in Pipeline.php line 148 at Pipeline->Illuminate\Pipeline{closure}(object(Request))in Pipeline.php line 53 at Pipeline->Illuminate\Routing{closure}(object(Request))in VerifyCsrfToken.php line 65 at VerifyCsrfToken->handle(object(Request), object(Closure))in Pipeline.php line 148 at Pipeline->Illuminate\Pipeline{closure}(object(Request))in Pipeline.php line 53 at Pipeline->Illuminate\Routing{closure}(object(Request))in AddQueuedCookiesToResponse.php line 37 at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))in Pipeline.php line 148 at Pipeline->Illuminate\Pipeline{closure}(object(Request))in Pipeline.php line 53 at Pipeline->Illuminate\Routing{closure}(object(Request))in EncryptCookies.php line 59 at EncryptCookies->handle(object(Request), object(Closure))in Pipeline.php line 148 at Pipeline->Illuminate\Pipeline{closure}(object(Request))in Pipeline.php line 53 at Pipeline->Illuminate\Routing{closure}(object(Request))in Pipeline.php line 102 at Pipeline->then(object(Closure))in Router.php line 574 at Router->runRouteWithinStack(object(Route), object(Request))in Router.php line 533 at Router->dispatchToRoute(object(Request))in Router.php line 511 at Router->dispatch(object(Request))in Kernel.php line 176 at Kernel->Illuminate\Foundation\Http{closure}(object(Request))in Pipeline.php line 30 at Pipeline->Illuminate\Routing{closure}(object(Request))in Debugbar.php line 51 at Debugbar->handle(object(Request), object(Closure))in Pipeline.php line 148 at Pipeline->Illuminate\Pipeline{closure}(object(Request))in Pipeline.php line 53 at Pipeline->Illuminate\Routing{closure}(object(Request))in TransformsRequest.php line 30 at TransformsRequest->handle(object(Request), object(Closure))in Pipeline.php line 148 at Pipeline->Illuminate\Pipeline{closure}(object(Request))in Pipeline.php line 53 at Pipeline->Illuminate\Routing{closure}(object(Request))in CheckForDebug.php line 25 at CheckForDebug->handle(object(Request), object(Closure))in Pipeline.php line 148 at Pipeline->Illuminate\Pipeline{closure}(object(Request))in Pipeline.php line 53 at Pipeline->Illuminate\Routing{closure}(object(Request))in CheckForSetup.php line 27 at CheckForSetup->handle(object(Request), object(Closure))in Pipeline.php line 148 at Pipeline->Illuminate\Pipeline{closure}(object(Request))in Pipeline.php line 53 at Pipeline->Illuminate\Routing{closure}(object(Request))in TrustProxies.php line 56 at TrustProxies->handle(object(Request), object(Closure))in Pipeline.php line 148 at Pipeline->Illuminate\Pipeline{closure}(object(Request))in Pipeline.php line 53 at Pipeline->Illuminate\Routing{closure}(object(Request))in NosniffGuard.php line 17 at NosniffGuard->handle(object(Request), object(Closure))in Pipeline.php line 148 at Pipeline->Illuminate\Pipeline{closure}(object(Request))in Pipeline.php line 53 at Pipeline->Illuminate\Routing{closure}(object(Request))in ContentSecurityPolicyHeader.php line 18 at ContentSecurityPolicyHeader->handle(object(Request), object(Closure))in Pipeline.php line 148 at Pipeline->Illuminate\Pipeline{closure}(object(Request))in Pipeline.php line 53 at Pipeline->Illuminate\Routing{closure}(object(Request))in ReferrerPolicyHeader.php line 17 at ReferrerPolicyHeader->handle(object(Request), object(Closure))in Pipeline.php line 148 at Pipeline->Illuminate\Pipeline{closure}(object(Request))in Pipeline.php line 53 at Pipeline->Illuminate\Routing{closure}(object(Request))in XssProtectHeader.php line 18 at XssProtectHeader->handle(object(Request), object(Closure))in Pipeline.php line 148 at Pipeline->Illuminate\Pipeline{closure}(object(Request))in Pipeline.php line 53 at Pipeline->Illuminate\Routing{closure}(object(Request))in FrameGuard.php line 17 at FrameGuard->handle(object(Request), object(Closure))in Pipeline.php line 148 at Pipeline->Illuminate\Pipeline{closure}(object(Request))in Pipeline.php line 53 at Pipeline->Illuminate\Routing{closure}(object(Request))in ShareErrorsFromSession.php line 49 at ShareErrorsFromSession->handle(object(Request), object(Closure))in Pipeline.php line 148 at Pipeline->Illuminate\Pipeline{closure}(object(Request))in Pipeline.php line 53 at Pipeline->Illuminate\Routing{closure}(object(Request))in StartSession.php line 64 at StartSession->handle(object(Request), object(Closure))in Pipeline.php line 148 at Pipeline->Illuminate\Pipeline{closure}(object(Request))in Pipeline.php line 53 at Pipeline->Illuminate\Routing{closure}(object(Request))in CheckForMaintenanceMode.php line 46 at CheckForMaintenanceMode->handle(object(Request), object(Closure))in Pipeline.php line 148 at Pipeline->Illuminate\Pipeline{closure}(object(Request))in Pipeline.php line 53 at Pipeline->Illuminate\Routing{closure}(object(Request))in Pipeline.php line 102 at Pipeline->then(object(Closure))in Kernel.php line 151 at Kernel->sendRequestThroughRouter(object(Request))in Kernel.php line 116 at Kernel->handle(object(Request))in index.php line 58

Additional context Add any other context about the problem here.

snipe commented 5 years ago

I can't reproduce this on the demo: https://demo.snipeitapp.com/manufacturers

Screen Shot 2019-08-15 at 3 37 56 AM

This looks to be a change in the way PCRE is handled in PHP 7.3, but we use the built-in URL validator from Laravel, so I'm not sure what the workaround here is other than perhaps downgrading your version of PHP to PHP 7.2. Seems like it might be worth it to try setting your error_reporting: E_ALL & ~E_WARNING; in your php.ini as well.

// Declare the rules for the form validation
    protected $rules = array(
        'name'   => 'required|min:2|max:255|unique:manufacturers,name,NULL,deleted_at',
        'url'   => 'url|nullable',
        'support_url'   => 'url|nullable',
        'support_email'   => 'email|nullable'
    );

More info: https://ayesh.me/Upgrade-PHP-7.3#pcre2

Snipe-IT Asset Management Demo
What's new and changing in PHP 7.3