14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License.
54514f5e3Sopenharmony_ci * You may obtain a copy of the License at
64514f5e3Sopenharmony_ci *
74514f5e3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84514f5e3Sopenharmony_ci *
94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and
134514f5e3Sopenharmony_ci * limitations under the License.
144514f5e3Sopenharmony_ci */
154514f5e3Sopenharmony_ci
164514f5e3Sopenharmony_ci/*
174514f5e3Sopenharmony_ci * @tc.name:decodeuricomponent
184514f5e3Sopenharmony_ci * @tc.desc:test decodeuricomponent
194514f5e3Sopenharmony_ci * @tc.type: FUNC
204514f5e3Sopenharmony_ci * @tc.require: issueI7CTF7
214514f5e3Sopenharmony_ci */
224514f5e3Sopenharmony_cilet uri="%c2%aa%66%55%58%c2%83%c2%93%00%c2%89%c3%96%08%58%c2%b4%c3%bd%46";
234514f5e3Sopenharmony_cilet uri_encode=decodeURIComponent(uri);
244514f5e3Sopenharmony_ciprint(encodeURIComponent(uri_encode));
254514f5e3Sopenharmony_ci
264514f5e3Sopenharmony_cilet uri1="%00";
274514f5e3Sopenharmony_cilet uri_encode1=decodeURIComponent(uri1);
284514f5e3Sopenharmony_ciprint(encodeURIComponent(uri_encode1));
294514f5e3Sopenharmony_ci
304514f5e3Sopenharmony_citry {
314514f5e3Sopenharmony_ci    let invalidURI = "%c0%80";
324514f5e3Sopenharmony_ci    decodeURIComponent(invalidURI);
334514f5e3Sopenharmony_ci} catch(err) {
344514f5e3Sopenharmony_ci    print(err.name);
354514f5e3Sopenharmony_ci}
364514f5e3Sopenharmony_ci
374514f5e3Sopenharmony_citry {
384514f5e3Sopenharmony_ci    let invalidURI1 = "http://example.com/?q=%";
394514f5e3Sopenharmony_ci    decodeURI(invalidURI1);
404514f5e3Sopenharmony_ci} catch(err) {
414514f5e3Sopenharmony_ci    print(err);
424514f5e3Sopenharmony_ci}
434514f5e3Sopenharmony_ci
444514f5e3Sopenharmony_citry {
454514f5e3Sopenharmony_ci    let invalidURI2 = "%E4%25BD%2593%25E8%2582%25B2";
464514f5e3Sopenharmony_ci    decodeURIComponent(invalidURI2);
474514f5e3Sopenharmony_ci} catch(err) {
484514f5e3Sopenharmony_ci    print(err);
494514f5e3Sopenharmony_ci}
504514f5e3Sopenharmony_ci
514514f5e3Sopenharmony_cilet header = "https://ifs.tanx.com/display_ifs?i~";
524514f5e3Sopenharmony_citry {
534514f5e3Sopenharmony_ci    let invalidURI = header + "%F5%8F%BF%BF";
544514f5e3Sopenharmony_ci    decodeURIComponent(invalidURI);
554514f5e3Sopenharmony_ci} catch (err) {
564514f5e3Sopenharmony_ci    print(err.name);
574514f5e3Sopenharmony_ci}
584514f5e3Sopenharmony_ci
594514f5e3Sopenharmony_citry {
604514f5e3Sopenharmony_ci    let invalidURI = header + "%F4%90%BF%BF";
614514f5e3Sopenharmony_ci    decodeURIComponent(invalidURI);
624514f5e3Sopenharmony_ci} catch (err) {
634514f5e3Sopenharmony_ci    print(err.name);
644514f5e3Sopenharmony_ci}
654514f5e3Sopenharmony_ci
664514f5e3Sopenharmony_ci{
674514f5e3Sopenharmony_ci    let validURI = header + "%F4%8F%BF%BF";
684514f5e3Sopenharmony_ci    decodeURIComponent(validURI);
694514f5e3Sopenharmony_ci    print("decode successful");
704514f5e3Sopenharmony_ci}
714514f5e3Sopenharmony_ci
724514f5e3Sopenharmony_civar uri0="https://www.runoob.com/my t" + "est.php?name=ståle&car=saab";
734514f5e3Sopenharmony_civar uri11 = uri0 + "/jfdlskafasfd";
744514f5e3Sopenharmony_civar uri2 = uri0 + "/2389018203";
754514f5e3Sopenharmony_civar uri3 = uri11 + "/jd2931dsafdsa";
764514f5e3Sopenharmony_civar uri4 = uri3 + "/jd2931wjeiojfwre";
774514f5e3Sopenharmony_ciprint(encodeURIComponent(uri0));
784514f5e3Sopenharmony_ciprint(encodeURIComponent(uri11));
794514f5e3Sopenharmony_ciprint(encodeURIComponent(uri2));
804514f5e3Sopenharmony_ciprint(encodeURIComponent(uri3));
814514f5e3Sopenharmony_ciprint(encodeURIComponent(uri4));
824514f5e3Sopenharmony_ci
834514f5e3Sopenharmony_ciprint(decodeURIComponent(uri0));
844514f5e3Sopenharmony_ciprint(decodeURIComponent(uri11));
854514f5e3Sopenharmony_ciprint(decodeURIComponent(uri2));
864514f5e3Sopenharmony_ciprint(decodeURIComponent(uri3));
874514f5e3Sopenharmony_ciprint(decodeURIComponent(uri4));
884514f5e3Sopenharmony_ci
894514f5e3Sopenharmony_ci{
904514f5e3Sopenharmony_ci    var result = true;
914514f5e3Sopenharmony_ci    var arr = [
924514f5e3Sopenharmony_ci    [0x00, 0x2F],
934514f5e3Sopenharmony_ci    [0x47, 0x60],
944514f5e3Sopenharmony_ci    ];
954514f5e3Sopenharmony_ci    for (var i = 0; i < arr.length; i++) {
964514f5e3Sopenharmony_ci        for (var j = arr[i][0]; j <= arr[i][1]; j++) {
974514f5e3Sopenharmony_ci            try {
984514f5e3Sopenharmony_ci                decodeURIComponent("%" + String.fromCharCode(j)+ "1");
994514f5e3Sopenharmony_ci                decodeURIComponent("%" + "1" + String.fromCharCode(j));
1004514f5e3Sopenharmony_ci                decodeURIComponent("%C0%" + String.fromCharCode(j, j));
1014514f5e3Sopenharmony_ci                decodeURIComponent("%E0%" + String.fromCharCode(j, j) + "%A0");
1024514f5e3Sopenharmony_ci                decodeURIComponent("%E0" + "%A0%" + String.fromCharCode(j, j));
1034514f5e3Sopenharmony_ci                decodeURIComponent("%F0%" + String.fromCharCode(j, j) + "%A0%A0");
1044514f5e3Sopenharmony_ci                decodeURIComponent("%F0" + "%A0%" + String.fromCharCode(j, j) + "%A0");
1054514f5e3Sopenharmony_ci                decodeURIComponent("%F0" + "%A0%A0%" + String.fromCharCode(j, j));
1064514f5e3Sopenharmony_ci                result = false;
1074514f5e3Sopenharmony_ci            } catch (e) {
1084514f5e3Sopenharmony_ci                if ((e instanceof URIError) !== true) {
1094514f5e3Sopenharmony_ci                    result = false;
1104514f5e3Sopenharmony_ci                }
1114514f5e3Sopenharmony_ci            }
1124514f5e3Sopenharmony_ci        }
1134514f5e3Sopenharmony_ci    }
1144514f5e3Sopenharmony_ci    print(result)
1154514f5e3Sopenharmony_ci}
1164514f5e3Sopenharmony_ci
1174514f5e3Sopenharmony_cilet invalid_uri_list = ["%ED%A0%80", "%ED%AF%BF", "%ED%B0%80", "%ED%BF%BF", "%E0%9F%BF"]
1184514f5e3Sopenharmony_cifor (let i = 0; i < invalid_uri_list.length; ++i) {
1194514f5e3Sopenharmony_ci    try {
1204514f5e3Sopenharmony_ci        decodeURIComponent(invalid_uri_list[i]);
1214514f5e3Sopenharmony_ci    } catch (err) {
1224514f5e3Sopenharmony_ci        print(err.name)
1234514f5e3Sopenharmony_ci    }
1244514f5e3Sopenharmony_ci}