patch 8.2.3384: cannot disable modeline for an individual file

Problem:    Cannot disable modeline for an individual file.
Solution:   Recognize "nomodeline" in a modeline. (Hu Jialun, closes #8798)
diff --git a/src/buffer.c b/src/buffer.c
index bc3378a..507eb01 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -5446,12 +5446,12 @@
 	return;
 
     ++entered;
-    for (lnum = 1; lnum <= curbuf->b_ml.ml_line_count && lnum <= nmlines;
+    for (lnum = 1; curbuf->b_p_ml && lnum <= curbuf->b_ml.ml_line_count && lnum <= nmlines;
 								       ++lnum)
 	if (chk_modeline(lnum, flags) == FAIL)
 	    nmlines = 0;
 
-    for (lnum = curbuf->b_ml.ml_line_count; lnum > 0 && lnum > nmlines
+    for (lnum = curbuf->b_ml.ml_line_count; curbuf->b_p_ml && lnum > 0 && lnum > nmlines
 		       && lnum > curbuf->b_ml.ml_line_count - nmlines; --lnum)
 	if (chk_modeline(lnum, flags) == FAIL)
 	    nmlines = 0;
diff --git a/src/testdir/test_modeline.vim b/src/testdir/test_modeline.vim
index 19c99b5..f28ad3e 100644
--- a/src/testdir/test_modeline.vim
+++ b/src/testdir/test_modeline.vim
@@ -360,4 +360,12 @@
   bw
 endfunc
 
+func Test_modeline_disable()
+  set modeline
+  call writefile(['vim: sw=2', 'vim: nomodeline', 'vim: sw=3'], 'Xmodeline_disable')
+  edit Xmodeline_disable
+  call assert_equal(2, &sw)
+  call delete('Xmodeline_disable')
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index a9c5b4c..d50d098 100644
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3384,
+/**/
     3383,
 /**/
     3382,