From 0562635bfdbffc11d0cda88c99b0cabb736c52ab Mon Sep 17 00:00:00 2001
From: Elmar Ludwig <elmar.ludwig@uni-osnabrueck.de>
Date: Wed, 7 Aug 2024 14:53:15 +0000
Subject: [PATCH] drop broken and insecure custom v-highlightjs attr, fixes
 #4437

Closes #4437

Merge request studip/studip!3227
---
 .../courseware/blocks/CoursewareCodeBlock.vue | 27 +++----------------
 1 file changed, 4 insertions(+), 23 deletions(-)

diff --git a/resources/vue/components/courseware/blocks/CoursewareCodeBlock.vue b/resources/vue/components/courseware/blocks/CoursewareCodeBlock.vue
index 9e5786750c8..a0dd11543b9 100644
--- a/resources/vue/components/courseware/blocks/CoursewareCodeBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareCodeBlock.vue
@@ -10,7 +10,7 @@
             @closeEdit="initCurrentData"
         >
             <template #content>
-                <pre v-show="currentContent !== ''" v-highlightjs="currentContent"><code ref="code" :class="[currentLang]"></code></pre>
+                <pre v-show="currentContent !== ''"><code v-html="highlightContent" class="hljs"></code></pre>
                 <div v-show="currentLang !== ''" class="code-lang">
                     <span>{{ currentLang }}</span>
                 </div>
@@ -63,28 +63,9 @@ export default {
         lang() {
             return this.block?.attributes?.payload?.lang;
         },
-    },
-    directives: {
-        highlightjs: {
-            deep: true,
-            bind(el, binding) {
-                let targets = el.querySelectorAll('code');
-                targets.forEach((target) => {
-                    if (binding.value) {
-                        target.innerHTML = binding.value;
-                    }
-                    hljs.highlightBlock(target);
-                });
-            },
-            componentUpdated(el, binding) {
-                let targets = el.querySelectorAll('code');
-                targets.forEach((target) => {
-                    if (binding.value) {
-                        target.innerHTML = binding.value;
-                        hljs.highlightBlock(target);
-                    }
-                });
-            },
+        highlightContent() {
+            let language = this.currentLang !== '' ? [this.currentLang] : null;
+            return hljs.highlightAuto(this.currentContent, language).value;
         },
     },
     mounted() {
-- 
GitLab